6

我认为由于类型擦除,使用instanceofandclass literals是不允许的parameterized generic typesexcept unbounded wild card types。为什么 Java 语言设计者允许这个例外?对于无界通配符类型没有任何类型擦除的作用吗?

4

1 回答 1

8

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

ArrayList某种”部分正是什么ArrayList<?>意思,这就是为什么:

if (foo instanceof ArrayList<?>)

已验证。它等同于使用原始类型:

if (foo instanceof ArrayList)
于 2013-02-19T13:59:23.673 回答