由于泛型类型信息在运行时被删除,因此使用instanceof是非法的 除了无界通配符类型之外的参数化类型的运算符。
我从有效的java版本2中提取此语句。它说使用instanceOf的首选方法是:
// Legitimate use of raw type - instanceof operator
if (o instanceof Set) { // Raw type
Set<?> m = (Set<?>) o; // Wildcard type
...
}
有些人可以解释这个概念吗?(我理解了具体化和删除的概念)
答案 0 :(得分:7)
如果您了解擦除的工作原理,您知道instanceof
无法检查已擦除的类型,因此它只能与原始类型一起使用。
同样,在确定对象是某种Set之后,您无法确定Set具有哪种类型。因此,您只能(安全地)使用Set<?>
(这意味着您从套装中提取的所有内容都不能缩小到Object
以上,并且您根本无法放入任何内容。)