美文网首页
泛型(持续更新中......)

泛型(持续更新中......)

作者: 翔子1987 | 来源:发表于2020-12-29 17:02 被阅读0次
一、泛型类和泛型接口

1.如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型。
2.要求:如果大家定义了类带了泛型的,建议在实例化时要指明类的泛型。
3.由于子类在继承带泛型的父类时,如果父类指明了泛型类型。则实例化子类对象时,不再需要指明泛型。子类不是泛型类。

public class SubOrder extends Order<Integer> {
}

4.由于子类在继承带泛型的父类时,如果父类不指明泛型类型。是泛型类(例:ArrayList)

public class SubOrder1<T> extends Order<T> {
}

1.泛型类可以有多个参数,此时应将多个参数一起放在尖括号内。比如:<E1,E2,E3>
2.泛型类的构造器如下:public GenericClass() {},错误的是public GenericClass<E>() {}
3.实例化后,操作原来泛型位置的结构必须与指定的泛型类型一致。
4.泛型不同的引用不能相互复制。
5.泛型如果不指定,将被擦除,泛型对应类型均按照Object处理,但不等价与Object。经验:泛型要使用一路都用。要不用,一路都不要用。
6.如果泛型结构是一个接口或抽象类,则不可以创建泛型类的对象。
7.jdk1.7,泛型的简化操作:ArrayList<Fruit> flist = new ArrayList<>();
8.泛型的指定中不能使用基本数据类型,可以使用包装类替换。
9.在类/接口上声明的泛型,在本类或本接口中即代表某种类型,可以作为非静态属性的类型,非静态方法的参数类型,非静态防范的返回值类型,但在静态方法中不能使用类得泛型。
10.异常类不能是类的泛型
11.不能使用new E[]。但是可以: E[] elements = (E[])new Object[capacity]; 参考:ArrayList源码中声明:Object[] elementData,而非泛型参数类型数组。
12.父类有泛型,子类可以选择保留泛型也可以选择指定泛型类型:

子类不能保留父类的泛型:按需实现
   没有类型  擦除
子类保留父类的泛型:泛型子类
  全部保留
  部分保留
1.png

结论:子类必须是“富二代”,子类除了指定或保留父类的泛型,还可以增加自己的泛型。

二、泛型方法

泛型方法:在方法中出现了泛型的结构,泛型参数与类得泛型参数没有任何关系。
泛型方法可以声明为静态的,原因:泛型参数是在调用方法的时候确定的,并不是实例化类时确定的。

//泛型参数
public <E> List<E> copyFromArrayToList(E[] arr) {
}
三、泛型在继承方面的体现

泛型在继承方面的体现
虽然类A是类B的父类,但是G<A>和 G<B>二者不具备子父类关系,二者是并列关系。
补充:类A是类B的父类,A<G>是B<G>的父类

//如下代码:这种写法时错误的,此时list1(List<Object> )和list2(List<String> )的类型不具又子父类关系。虽然Object是String的父类。
List<Object> list1 = null;
List<String> list2 = null;
list1 = list2

证明反证法: list1=list2;假设list1=list2,list1.add(123);导致非String的数据混入。出错

四、通配符的使用

类A是类B的父类,但是G<A>和 G<B>二者没有关系,G<?>是G<A>和 G<B>的父类
对于List<?>就不能向其内部添加数据了,除了添加null之外。

List<Object> list1 = null;
List<String> list2 = null;
List<?>
list1 = list2
1609216469(1).png
1609216767(1).png

相关文章

  • 泛型(持续更新中......)

    一、泛型类和泛型接口 1.如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型。2.要求:...

  • golang泛型前瞻

    9月更新了golang设计草稿中的泛型语法这里可以在线编译如下 这是一个泛型的Print函数 循环打印泛型切片中的...

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

  • 注解

    作用: 在类中定义泛型: 在方法中定义泛型: 给泛型设置通配符上限: 给泛型设置通配符下限: 泛型擦除: 兼容性:...

  • TS 泛型+装饰器

    typescript 中的泛型 泛型的定义泛型函数泛型类泛型接口 泛型:软件工程中,我们不仅要创建一致的定义良好的...

  • 泛型边界

    extends 和 super关键字运用在泛型中,主要作用是限制泛型的边界,确定在泛型方法或者泛型类中可是利用泛型...

  • Java-API-集合框架(三)-泛型

    泛型的由来和基本使用 泛型的擦除 泛型类的使用 泛型方法的使用 泛型接口 泛型通配符(?) 通配符? 在api中的...

  • Kotlin泛型的高级特性(六)

    泛型的高级特性1、泛型实化2、泛型协变3、泛型逆变 泛型实化 在Java中(JDK1.5之后),泛型功能是通过泛型...

  • Java 19-5.1泛型

    泛型类定义泛型类可以规定传入对象 泛型类 和泛型方法 泛型接口 如果实现类也无法确定泛型 可以在继承类中确定泛型:

  • Java泛型

    参考:Java知识点总结(Java泛型) 自定义泛型类 自定义泛型接口 非泛型类中定义泛型方法 继承泛型类 通配符...

网友评论

      本文标题:泛型(持续更新中......)

      本文链接:https://www.haomeiwen.com/subject/excfoktx.html