genericity(泛型)

来源:互联网 发布:人工智能 华伍 编辑:程序博客网 时间:2024/05/29 16:23

泛型的小结: 

1.泛型的原型是Object,定义了泛型只是编译器在做一些验证工作,设置会检查,获取会自动转换,集合支持泛型,泛型约束集合元素。

2.内部原理2个(获取设置)和错误1个(类造型异常)和方便遍历(2个)

******************************************************************************************************

知识点1.(Point用于Test,加粗案例是易错点)

public class Point<T> {
private T x;
private T y;
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
public T getY() {
return y;
}
public void setY(T y) {
this.y = y;
}
public Point(T x, T y) {
super();
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "Point [x=" + x + ", y=" + y + "]";
}
}

public class demo1 {
public static void main(String[] args) {
// 指定是Integer,创建时是Object类型。只是当成Integer看待
Point<Integer> p1=new Point<Integer>(1,2);
p1.setX(1);//编译器验证
int x1=p1.getX();//自动转换加拆箱
Point p2=p1;//没加泛型
p2.setX("一");
String x2=(String)p2.getX();
System.out.println("x2:"+x2);
x1=p1.getX();
System.out.println("x1:"+x1);//p2改了x,p1获取x又自动转换,发现类造型异常

}
}

public class demo2 {
public static void main(String[] args) {
Collection<String> c=new ArrayList<String>();
c.add("一");//约束了添加元素

//遍历集合元素
for(String str: c){
System.out.println(str);
}
       // 迭代器也指定泛型,泛型的实际类型,应当与它遍历的集合的泛型类型一致 
Iterator<String> it=c.iterator();
while(it.hasNext()){
String str=it.next();//获取元素时不需要再造型了
System.out.println(str);
}
}
}