为什么instanceof运算符允许使用无界外卡类型而不允许使用Java中的其他参数化类型?
我认为由于类型擦除 ,除了unbounded wild card types
之外, parameterized generic types
不允许使用instanceof
和class literals
。 为什么Java语言设计者允许这种exception? 对于无界外卡类型,没有类型擦除的任何作用?
关键是一个对象知道它的具体类 – 但不知道它的generics类型参数。 因此,如果我们构造一个ArrayList
,它在执行时知道它是某种类型的ArrayList
– 但它不知道Integer
部分。
“ ArrayList
of some kind”部分正是ArrayList>
意思,这就是为什么:
if (foo instanceof ArrayList>)
已validation。 它只相当于使用原始类型:
if (foo instanceof ArrayList)