由于泛型类型信息在运行时被擦除,因此对非无界通配符类型的参数化类型使用instanceof运算符是非法的。
我从有效的java版本2中摘录了这句话。它说,使用instanceOf的首选方法是:
// Legitimate use of raw type - instanceof operator
if (o instanceof Set) { // Raw type
Set<?> m = (Set<?>) o; // Wildcard type
...
}有人能解释一下这个概念吗?(我理解了具体化和擦除的概念)
发布于 2012-02-15 13:48:51
如果您了解erasure的工作原理,就会知道instanceof无法检查被擦除的类型,因此它只能与原始类型一起使用。
同样,在确定对象是某种类型的集合之后,您无法确定该集合具有哪种类型。因此,您只能(安全地)使用Set<?> (这意味着您从集合中提取的所有内容都不能缩小到超过Object的范围,并且您根本不能放入任何内容)。
https://stackoverflow.com/questions/9288406
复制相似问题