每个泛型都定义一个原生态类型,即不带任何实际类型参数的泛型名词。例如,与List<E>相对应的原生态类型是List.原生态类型就像是从类型声明中删除了所有泛型信息一样。实际上,原生态类型List与Java平台没有泛型之前的借口类型List完全一样。
Set<Object> 是一个参数化类型,表示可以包含任何对象类型的一个集合;Set<?>则是一个通配符类型,表示只能包含某种未知对象类型的一个集合,Set则是一个原生态类型,他脱离了泛型系统,前两种是安全的,最后一种是不安全的。
泛型信息可以在运行时被擦除,因此在参数化类型而非无限制通配符类型上使用instanceof操作符是非法的,<>和?是多余的, 例子: if(o instanceof set) 而不是 if(o instanceof set<?>) ,不能把List<String> 传给一个参数类型为List<Object>的方法(即传参的时候)。 ?只能用于方法中的参数(传参),不能使用new创建。
数组中不能使用泛型。因为数组是具体化的(reified),只有在运行时在知道并检查他们的元素约束。