每种泛型都定义一个原生态类型(raw type),即不带任何实际类型参数的泛型名称。例如List<String>为参数化类型List就是原生态类型。
原生态类型是无法提供编译前检查的也就是说我们能在一个list中添加两个不同类型的值的。这是很不合理的,所以我们应该避免使用原生态类型。参数化类型就有效避免了这个问题。它能够提供编译前检查,并且可以自动完成类型转化。这个原则应该是刚开始学习编程就应该养成的习惯,这里就不赘述了。
List和List<?>区别
后者一般用于只读模式
List<?>因为不知道里面元素的类型,所以不能执行add方法,除非是null