我认为由于type erasure,除了instanceof
之外,class literals
不允许使用parameterized generic types
和unbounded wild card types
。为什么Java语言设计者允许这种异常?对于无界外卡类型,没有任何类型擦除的角色?
答案 0 :(得分:8)
关键是对象知道它的具体类 - 但不知道它的泛型类型参数。因此,如果我们构造一个ArrayList<Integer>
,它在执行时知道它是某种类型的ArrayList
- 但它不知道Integer
部分。
“ArrayList
某种”部分恰恰是ArrayList<?>
的含义,这就是原因:
if (foo instanceof ArrayList<?>)
有效。它只相当于使用原始类型:
if (foo instanceof ArrayList)