泛型的小千世界(java)

栗子~~      2022-05-12     628

关键词:

文章目录


前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


泛型的小千世界(java)

1、泛型

1.1 概述

本质上就是类型参数化。


1.2 好处

1)、对于开发的功能,代码更加灵活
2)、使代码更加简洁
3)、避免强制转换,造成的程序异常


1.3 泛型的特点

【类型擦除】
代码在进入jvm后,泛型会被擦除掉,这时如果该泛型设置了类型上限,那么转换成该类型上限,否则转换成object类型

代码如下(示例)

//未指定上限
public class Test1<T> 
    T t;
    public T getValue() 
        return t;
    
    public void setVale(T t) 
        this.t = t;
    

//指定上限
public class Test2<T extends String> 
    T t;
    public T getT() 
        return t;
    
    public void setT(T t) 
        this.t = t;
    


2、泛型的用法

2.1 泛型接口的列子

利用泛型类声明接口来唱歌

代码如下(示例)

package com.yzy.text;
/*
* 泛型接口
* 
* */
interface Computer<E,F>  //定义两个泛型
      void makechorue(E x,F y);

class Chorus<E,F>implements Computer <E,F>
      public void makechorue(E x, F y) 
            x.toString();  //因为不知道什么类型,所以统一变成字符串
            y.toString();
            
      
      

class Musical
      public String toString()
            System.out.println("| 5 6 3-| 5  17  56|");
            return "";                                  //弹出String型
      

class Singer
      public String toString()
            System.out.println("好一朵茉莉花");
            return "";
      

public class Text57OOP35 
public static void main(String[] args) 
      Chorus<Singer, Musical> model = new Chorus<Singer,Musical>();
      Singer singer = new Singer();
      Musical musical= new Musical();
      model.makechorue(singer, musical);


效果:


2.2 泛型类例子

利用泛型类来实现求取锥类的体积

代码如下(示例)

/**
* 锥类
* */
class Cone<E>                    
      double height;
      E bottom;                           //低
      public Cone(E bottom) 
            this.bottom = bottom;
      
      public double computeVolume()
            String  s = bottom.toString();
            double ss =Double.parseDouble(s);
            return 1.0/3.0*ss*height;
      

/**
* 圆锥底面积
* */
class CircleA
      double  radius, area;
      public CircleA(double r) 
            
            radius = r;
      
      public String toString()                           
            
            area=radius*radius*Math.PI;    //Math.PI           π的意思
            return  ""+area;           //double型转换成String型
      

/**
* 四角锥 底面积
* */
class Rectangle
      double sidA,sidB,area;
      public Rectangle(double sidA, double sidB) 
            this.sidA = sidA;
            this.sidB = sidB;
      
      public String toString()                       
            
            area =sidA*sidB;
            return ""+area;
      
      

public class Text56OOP34 
      public static void main(String[] args) 
            CircleA circle = new CircleA(10);
            Cone<CircleA> coneone = new Cone<CircleA>(circle);
            coneone.height = 30;
            System.out.println("圆锥体积:"+coneone.computeVolume());
            Rectangle rectangle = new Rectangle(10, 20);
            Cone<Rectangle>  conetwo = new Cone<Rectangle>(rectangle);
            conetwo.height = 40;
            System.out.println("四角锥体积:"+conetwo.computeVolume());
      

效果:


3.其他

3.1 自定义生成泛型对象

代码如下(示例)

public <E> E objectNewInstance(Class<E> clazz) 
              E a = null;
              try 
                      a=clazz.newInstance();
               catch (Exception e1) 
                     log.error("创建自定义泛型对象错误:",e1);
              
              return a;
       

使用:

 E e =  (E)  objectNewInstance(DeclaredDlCurveCompanyTimeVo.class);

3.2 泛型对象 转成 class 对象

代码如下(示例)

public void test(List<F> records) 
              records.forEach(vo->
                     try 
                           //泛型对象 转成 class 对象
                           Class<? extends Object> clazz = vo.getClass();         
                      catch (Exception e) 
                           log.error("反射错误:",vo);
                     
              );    
       

3.3 继承关系的使用

即设置泛型上限,传入的泛型必须是String类型或者是他的子类

代码如下(示例)

public <T extends String> void test(T t) 

3.4 依赖关系的使用

F是继承自E。即传入的类型是E类型或者是E类型的子类

代码如下(示例)

public <E, F extends E> void test(E e, F c) 

3.5 通配符

注意: 通配符不能用作返回值
如果返回值依赖类型参数,不能使用通配符作为返回值。可以使用类型参数返回:

public <T> T test (T t)
  return t;

(1) <?> 无限通配符
注意: 无限通配符只能读的能力,没有写的能力。

代码如下(示例)

public void test(List<?> list) 
     //只允许读数据
      Object o = list.get(0);
     //不允许写数据
     // list.add("1111");

(2) <? extends T> 定义上限 表示参数化类型可能是T 或是 T的派生类(子类);
频繁往外读取内容的,适合用上界Extends。

(3) <? super T> 定义下限 表示参数化类型可能是T 或是 T的基类(父类);
经常往里插入的,适合用下界Super

代码如下(示例)

class A    

class B extends A

class C extends B

public class Test 
      public static List<B> b = new ArrayList<>();
      public static List<C> c = new ArrayList<>();
      public static List<A> a = new ArrayList<>();
      
      public static void main(String[] args) 
            List<? extends B> listextends = null;
            List<? super B> listsuper = null;
            //? extends B   表示参数化类型可能是T 或是 T的派生类(子类);
            listextends = Test.a;  //报错
            listextends = Test.b;
            listextends = Test.c;
            //<? super T> 表示参数化类型可能是T 或是 T的基类(父类);
            listsuper  = Test.a;
            listsuper  = Test.b;
            listsuper  = Test.c;  //报错
      

效果:

(4) <? super T>和<? extends T> 经典用法

public <T> void copy(List<? super T> dest, List<? extends T> src) 
            for (int i = 0; i < src.size(); i++)
                dest.set(i, src.get(i));
            
       

java泛型的设计

Java泛型的设计引言泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。泛型基础泛型类我们首先定义一个... 查看详情

java泛型的应用

---恢复内容开始---在开发中,我们有时候会用到泛型来写工具类,为了使方法更通用,以前,没有完全弄懂,今天,就这个机会把泛形写一写泛型是JavaSE1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定... 查看详情

另一个泛型的 Java 泛型

】另一个泛型的Java泛型【英文标题】:JavaGenericofAnothergeneric【发布时间】:2014-01-0717:58:21【问题描述】:我有接口:interfaceIdentifable<TextendsSerializable>TgetID();和实现这个的类:publicclassCatimplementsIdentifable<Long>publicLonggetID().... 查看详情

深入java泛型一泛型的作用与定义(代码片段)

第一章深入Java泛型一、泛型的作用与定义1.1泛型的作用1.2泛型的定义1.3泛型擦除一、泛型的作用与定义1.1泛型的作用使用泛型能写出更加灵活通用的代码。泛型的设计主要参照了C++的模板,旨在能让你写出更加通用化&... 查看详情

java泛型的基本介绍和使用

现在开始深入学习java的泛型了,以前一直只是在集合中简单的使用泛型,根本就不明白泛型的原理和作用。泛型在java中,是一个十分重要的特性,所以要好好的研究下。一、泛型的基本概念 泛型的定义:泛型是JDK1.5的一项... 查看详情

Java泛型:包含泛型的数组[重复]

】Java泛型:包含泛型的数组[重复]【英文标题】:JavaGenerics:Arraycontaininggenerics[duplicate]【发布时间】:2011-12-2401:33:04【问题描述】:可能重复:Javahowto:GenericArraycreationErrorgenericarraycreation我的任务是用Java编写一个哈希表,它必须... 查看详情

深入java泛型(三泛型的上下边界)(代码片段)

第一章深入Java泛型三、泛型的上下边界3.1<?extendsE>:上界通配符(UpperBoundsWildcards)3.2<?superE>:下界通配符(LowerBoundsWildcards)3.3上下通配符的副作用三、泛型的上下边界?extendE是泛型的上边界࿰... 查看详情

java泛型的其他应用——泛型接口泛型方法泛型数组以及泛型的嵌套设置

学习目标掌握泛型接口的使用掌握泛型方法的定义的及使用掌握泛型数组的使用掌握泛型的嵌套设置之前所有的操作都是在类中直接使用泛型操作的,那么,对于Java来说,也可以直接在接口中定义及使用泛型。定义泛型接口在JD... 查看详情

java泛型的作用及其基本概念

一、泛型的基本概念   java与c#一样,都存在泛型的概念,及类型的参数化。java中的泛型是在jdk5.0后出现的,但是java中的泛型与C#中的泛型是有本质区别的,首先从集合类型上来说,java中的ArrayList<Integer>和ArrayList&... 查看详情

java中泛型的使用

泛型是JavaSE1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。Java语言引入泛型的好处... 查看详情

java泛型(代码片段)

文章目录前言一、泛型1.泛型的好处2.泛型的本质3.泛型类4.泛型接口5.泛型方法5.限定类型变量6.泛型的约束和局限性7.通配符类型总结前言提示:以下是本篇文章正文内容,下面案例可供参考一、泛型1.泛型的好处1.适用于... 查看详情

java重点--泛型(代码片段)

文章目录💖泛型的概念✨使用泛型的好处与弊端✨定义和使用含有泛型的类✨定义和使用含有泛型的方法✨定义和使用含有泛型的接口✨泛型的通配符✨通配符的高级使用--受限泛型✨斗地主小案例💖泛型的概念泛型是... 查看详情

java泛型java使用泛型的意义

Java泛型Java使用泛型的意义@authorixenos  直接意义在编译时保证类型安全 根本意义a)类型安全问题源自可复用性代码的设计,泛型保证了类型安全的复用模板b)使用复用性模板时不用手动强制类型转换 三种泛型实现... 查看详情

java中泛型的理解

Java中的泛型,本质上来说,就是是参数化类型,就是说所操作的数据类型被指定为一个参数,而不是确定的某种类型。这种数据类型可以用在类、接口和方法创建中。即泛型类、泛型接口、泛型方法。这样说可能不够生动,来... 查看详情

java泛型和内部类(代码片段)

文章目录一、泛型的概述1.概念2.泛型的定义3.泛型的使用4.泛型的意义5.泛型是如何编译的?二、泛型的进一步使用1.泛型类的定义-类型边界Number类2.泛型方法3.泛型中的父子类型4.通配符?通配符上界通配符下界5.泛型的... 查看详情

Java 泛型的类型别名

】Java泛型的类型别名【英文标题】:TypealiasesforJavagenerics【发布时间】:2009-03-2521:25:13【问题描述】:我有一组相当复杂的Java泛型类。比如我有一个界面interfaceDoable<X,Y>XdoIt(Yy);和实现classDoableImplimplementsDoable<Foo<Bar<Baz,... 查看详情

java讲课笔记35:初探泛型

文章目录零、本讲学习目标一、泛型的概念二、泛型的好处(一)提高程序类型安全(二)消除强制类型转换三、案例演示泛型使用(一)类使用泛型(二)构造方法使用泛型(三)设置多个泛型(四)使用通配符(五)使用泛... 查看详情

java泛型

1/**2*泛型定义3*泛型是JavaSE1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。Java语言引入泛型的好... 查看详情