0. 泛型的类型参数不能用在Java异常处理的catch语句中。因为异常处理是由JVM在运行时刻来进行的。由于类型信息被擦除,JVM是无法区分两个异常类型MyException<String>;
和MyException<Integer>
的。对于JVM来说,它们都是 MyException类型的。也就无法执行与异常对应的catch语句。
1.?通配符所代表的其实是一组类型,但具体的类型是未知的。List<?>
所声明的就是所有类型都是可以的。但是List<?>
并不等同于List<Object>
。List<Object>
实际上确定了List
中包含的是Object
及其子类,在使用的时候都可以通过Object
来进行引用。而List<?>
则其中所包含的元素类型是不确定。其中可能包含的是String
,也可能是Integer
。如果它包含了String
的话,往里面添加Integer
类型的元素就是错误的。正因为类型未知,就不能通过new ArrayList<?>()
的方法来创建一个新的ArrayList
对象。因为编译器无法知道具体的类型是什么。但是对于 List<?>
中的元素确总是可以用Object
来引用的,因为虽然类型未知,但肯定是Object
及其子类。
时间: 2024-10-14 11:20:16