为什么instanceof运算符允许使用无界外卡类型而不允许使用Java中的其他参数化类型?

时间:2013-02-19 13:54:58

标签: java generics

我认为由于type erasure,除了instanceof之外,class literals不允许使用parameterized generic typesunbounded wild card types。为什么Java语言设计者允许这种异常?对于无界外卡类型,没有任何类型擦除的角色?

1 个答案:

答案 0 :(得分:8)

关键是对象知道它的具体类 - 但不知道它的泛型类型参数。因此,如果我们构造一个ArrayList<Integer>,它在执行时知道它是某种类型的ArrayList - 但它不知道Integer部分。

ArrayList某种”部分恰恰是ArrayList<?>的含义,这就是原因:

if (foo instanceof ArrayList<?>)

有效。它只相当于使用原始类型:

if (foo instanceof ArrayList)