这里列出一些常用的误区,不必死记,过一遍理解即可
基本类型不能作为类型参数
//error Mapmap1 = new HashMap<>(); //ok Map map2 = new HashMap<>();
不能创建类型参数的实例
public class Box{ public void add(Class cls) throws Exception{ //error E e1 = new E(); //ok E e2 = cls.newInstance(); } }
不能用类型参数定义静态变量
public class Box{ //error private static E value; } Box box1 = new Box<>(); Box box2 = new Box<>(); //请问静态变量value是什么类型?Integer还是String?
泛型类型的类型参数不能用在静态方法上
public class Box{ //error public static void show(E value){} }
类型参数不能跟instanceof一起使用
ArrayListlist = new ArrayList<>(); //error if (list instanceof ArrayList ){ }
不能创建带有类型参数的数组
//error Box[] boxes1 = new Box [4]; //ok Box [] boxes2 = new Box[4];
下面的方法不属于重载
//error void test(Boxbox) { } void test(Box box){ }
//error
void foo(Box extends Number> box) {
}
void foo(Box box){
}
不能定义泛型的异常类
//error public class MyExceptionextends Exception { }
catch的异常类型不能用类型参数
public staticextends Exception { try { //error } catch (T e){} }
下面代码是正确的
class Parser{ //OK public void parse(File file) throws T { } }



