----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
泛型:为了防止向集合中存储元素时,出现不同类型的元素,就在定义指定元素
类型
好处:1.将运行时期才出现的ClassCastException,转移到编译时期,让程序
员发现并解决问题(安全)
2.避免强制转换的麻烦
格式:ArrayList<Integer>al=new ArrayList<Integer>();
如果之后要将集合中的元素放入临时容器(迭代器)中时,也要使用泛型
Iterator<Integer>it=al.iterator();
泛型类:当类中操作的引用数据类型(基本数据类型不行)不确定时
Class Utils<QQ>{
private QQ q;
public void setObject(QQ q){
this.q=q;
}
public QQ setObject(){
return q;
}
}
主函数中
Utils<Worker> ut=new Utils<Worker>;
ut.setObject(new Worker());
Worker w=ut.getObject();//不用强转
泛型方法:当定义泛型类时,在主函数中明确要操作的对象类型后,泛型类中的方法索要操作的类型就固定了,要想操作其他类型,就要再建立一个其他类型的对象
因此,把泛型定义在方法中,当传入什么类型的参数时,就操作什么类型的参数,不用再new
Class Demo{
public <T>void show(T t){
System.out.println(t);
}
public <Q> void print(Q q){
System.out.println(q);
}
}
主函数中
Demo d=new Demo();
d.show(“haha”);
d.show(new Integer(4));
d.print(“heihei”);
当泛型类和泛型方法混搭使用时,互不干扰,即没用泛型方法的话,就以泛型类为准;有泛型方法就玩自己的
PS:静态方法不可以访问泛型类,但可以使用泛型方法
public static <W> void method(W w){}
泛型接口:定义泛型后,要在实现接口时,明确数据类型,或者在主函数中new对象时确定
通配符:当自始至终都不确定具体类型时,就用<?>,但就不能使用类型的特有方法了
泛型限定:用于泛型扩展
1.? extends E:可以接收E类型或者其子类型—上限
2.?super E:可以接收E类型或者其父类型—下限
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------