JavaSE——泛型2

1.定义一个泛型类

1.1.实现一个顺序表的泛型类

定义语法:

class 类名称<类型形参>{}   //定义语法

public class MyArrayList<E> implements list<E>;  
//第一个E是形参,第二个E是实参 

1.2.数组类型或者引用类型记得置空

   否则会引发内存泄漏,即原本语义上应该死去(最后被回收)的对象因为

1.3泛型的类型擦除问题

      1.已知泛型是在工作在编译期间的一种机制

      2.编译器(javac)在编译器期间,将E变换一种具体的类型——类型擦除

MyArrayList<E>   => Object
MyArrayList<E extends Object>    //extends是在定义中的   

了解:3.定义的边界问题

class MyArrayLsit <E extends Integer>{
    
}
//E只能接受Integer 类型子类型(包括Integer 本身)

      4.泛型(Raw Type)

MyArrayList<String>
MyArrayList<Double>
MyArrrayList<>

MyArrayList        //原始类型

      5.泛型的父类和子类的问题

MyArrayList<Object>
MyArrayList<Integer>
MyArrayLAist<Number>
//泛型参数没有上下级关系,不可调用

void print(ArrrayList<Object>list){}

print(new MyArrayList<Object>(Object))   //正确
print(new MyArrayList<Number>(Number))     //错误
print(new MyArrayList<Integer>(Integer))   //错误

      6.泛型用在使用泛型类(泛型方法中)通配符

MyArrayList<?>list;    //通配符 即为Object(最大的)
list = objectList;
list = integerList;

MyArrayList<Integer>   //可认为是通配符的子类型
MyArrayList<Object>    //不可认为是子类型

   通配符的上下界(使用)

MyArrayList<? extends Integer>list;     //上界(extends是在使用中的)
MyArrayList<? super Integer>list;       //下界

6.泛型总结

  1.掌握泛型类的使用

  2.了解泛型方法的使用:用来实现任意类型

  3.掌握泛型是编译期间的机制,和运行时无关

    1.有类型擦除问题

     2.无法使用 list instanceof List<Integer>

4.定义泛型类

    1.了解什么类型形参(paramater),什么是类型实参(argument)

    2.class ArrayList(....) //决定了类型擦除的边界

5.使用

    1.ArrayList<Object> 不是 ArrayList<Integer> 的祖先类型

    2.ArrayLsit<?> 是 ArrayList<Integer> 的祖先类型

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值