JAVA泛型浅析
【IT168技术文档】
擦除的原则:
1、 所有参数化容器类都被擦除成非参数化的(raw type);如List<E>、List<List<E>>都被擦除成List;
2、 所有参数化数组都被擦除成非参数化的数组;如List<E>[],被擦除成List[];
3、 Raw type的容器类,被擦除成其自身,如List 被擦除成List;
4、 原生类型(int,String还有wrapper类)都擦除成他们的自身;
5、 参数类型E,被擦除成Object;
6、 所有约束参数如<? Extends E>、<X extends E>都被擦除成E;
7、 如果有多个约束,擦除成第一个,如<T extends Object & E>,则擦除成Object;
例如:
泛化代码:
擦除后就变成了:List<String> words = new ArrayList<String>();
words.add("Hello ");
words.add("world!");
String s = words.get(0)+words.get(1);
擦除后的代码和以前没有泛型时候写的代码没有任何区别!List words = new ArrayList();
words.add("Hello ");
words.add("world!");
String s = ((String)words.get(0))+((String)words.get(1))
再例如:
泛化代码:
擦除后(所有类型参数都被去掉,T被擦除成Object)就变成(注意红色部分):public class textReader<T>...{
private T a;
public textReader(T b)...{
this.a = b;
}
public T getA()...{
return a;
}
public static void main(String[] agrvs)...{
String in = "1234567890";
textReader<String> test = new textReader<String>(in);
String out = test.getA();
System.out.println(out);
}
}
public class textReader...{
private Object a;
public textReader(Object b)...{
this.a = b;
}
public Object getA()...{
return a;
}
public static void main(String[] agrvs)...{
String in = "1234567890";
textReader test = new textReader (in);
String out = (String)test.getA();
System.out.println(out);
}
}
0
相关文章
