InstanceOf方法用于泛型?

时间:2012-02-15 05:39:20

标签: java generics

由于泛型类型信息在运行时被删除,因此使用instanceof是非法的 除了无界通配符类型之外的参数化类型的运算符。

我从有效的java版本2中提取此语句。它说使用instanceOf的首选方法是:

// Legitimate use of raw type - instanceof operator
if (o instanceof Set) { // Raw type
Set<?> m = (Set<?>) o; // Wildcard type
...
}

有些人可以解释这个概念吗?(我理解了具体化和删除的概念)

1 个答案:

答案 0 :(得分:7)

如果您了解擦除的工作原理,您知道instanceof无法检查已擦除的类型,因此它只能与原始类型一起使用。

同样,在确定对象是某种Set之后,您无法确定Set具有哪种类型。因此,您只能(安全地)使用Set<?>(这意味着您从套装中提取的所有内容都不能缩小到Object以上,并且您根本无法放入任何内容。)