Java超全面笔记(九)--- 泛型

在集合中使用泛型:

ArrayList

ArrayList<Integer> list = new ArrayList<Integer>();

泛型<Integer>指定数组中加入数据的类【指定的类型不能是基本数据类型,需要用他们的包装类】

泛型的嵌套:

以HashMap为例

Map<String,Integer> map = new HashMap<String, Integer>();
map.put("Tom",12);

Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
Iterator<Map.Entry<String, Integer>> iterator = entrySet.iterator();
while (iterator.hasNext()){
    Map.Entry<String, Integer> e = iterator.next();
    System.out.println(e.getKey()+"\t"+e.getValue());
}

总结:

  1.  集合接口或集合类在jdk5.0时都修改为带泛型的结构

ii)  在实例化接口类时,可以指明具体的泛型类型

iii)  指明后,在集合类或接口中凡是定义类或接口时,内部结构(方法、构造器、属性等)使用到泛型的位置,都指定为实例化的泛型类型

add(E e)à实例化后add(Integer e)

iv)  如果实例化时,没有指明泛型的类型,默认为Object

自定义泛型类

如果定义了泛型类,实例化没有指明类的泛型,则认为泛型类型为Object类型

如果定义了类是带泛型的,在实例化时最好指明类的泛型

子类在继承带泛型的父类时,指明了泛型类型,则实例化子类对象时,不用再指明泛型类型

public class SubOrder extends Order<Integer> {//SubOrder不是泛型类,只是普通的类

SubOrder sub1 = new SubOrder();

sub1.setOrder(Integer e)【只能添加Integer类型的数据】

public class SubOrder1<T> extends Order<T> {//SubOrder1<T>是泛型类

SubOrder1<String> sub2 = new SubOrder1<String>();【可以重新定义泛型类型】

sub2.setOrder(String e)

泛型方法

在方法中出现了泛型的结构,泛型参数与类的泛型参数没有关系,即与类是不是带泛型的无关

public <E> List<E> copy(E[] arr){
}

【泛型方法的可以声明为静态的】原因:泛型参数是在调用方法时确定的,不是在实例化的时候确定的

public static <E> List<E> copy(E[] arr){
}

public和List中间的<E>如果不写,在编译时会将E误认为一个类型(如String),但其实泛型E是一个变量

通配符:?

类A是类B的父类,G<A>和G<B>没有关系的,二者的共同父类是:G<?>

List<Object> list1 = null;
List<String> list2 = null;
List<?> list = null;
public void print(List<?> list){
    Iterator<?> iterator = list.iterator();
    while (iterator.hasNext()){
        Object obj = iterator.next();//Object是根父类,用他来接收
        System.out.println(obj);
    }
}

添加:对于List<?>不能向其内部添加数据,除了null

读取:允许读取数据,读取的数据类型为Object

Object o = list.get(int index);

有限制条件的通配符

? 可看作\left ( -\infty ,+\infty \right )

 

? extends A→\left ( -\infty ,A \right ):

G< ? extends A > 可以接收G<A>和G<B>,其中B是A的子类【≤】

? super A→\left ( A ,+\infty \right ) :

       G< ? super A > 可以接收G<A>和G<C>,其中C是A的父类【≥】

获取数据:

extends可用Object或A的对象接收【e≤A≤Object】

super只能用Object接收【A≤e≤Object】

写入数据:

extends不能写入

super可以写A或A的子类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值