Java中泛型有哪些用法呢?
下文是笔者总结的java中的泛型用法大全,如下所示:
泛型常用
public interface list<E> { void add(E); Iterator<E> iterator(); }
泛型同子类
Child是Parent的子类注意事项: List<Child>
却不是List<Parent>的子类
所以List<Object> list = new ArrayList<String>()是错误的
List<String> ls = new ArrayList<String>(); //1 List<Object> lo = ls; //2 lo.add(new Object()); // 3 String s = ls.get(0); // 4将object转换为string将失败此时应在泛型中使用通配符?:
void printCollection(Collection<?> c) { for (Object o: c) { // 1 // do something } }此处的?表示类型未知,但是任何对象均是Object,因此上例的1是正确的。但下例却是错误的:
void add(Collection<? extends MyClass> c) { c.add(new MyClass()); // wrong } // ok原因也很明确,? extends MyClass说明类型是MyClass的子类,但是却并不知道具体类型
泛型方法
<T> add(Collection<T> c, T t) { c.add(t); } 编译器会进行相应的类型转换操作
泛型运行时的对比
List<String> l1 = new ArrayList<String>(); List<Integer> l2 = new ArrayList<Integer>(); System.out.println(l1.getClass() == l2.getClass()); // true
泛型数组--会导致类型不安全
List<String>[] lsa = new ArrayList<String>[10]; // error Object o = lsa; Object []oa = (Object[])o; List<Integer> li = new ArrayList<Integer>(); li.add(new Integer(3)); oa[1] = li; String s = lsa[1].get(0); // Runtime error
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。