【发布时间】:2010-10-23 00:56:01
【问题描述】:
给定:
public class C<T> {
private class D {
public boolean equals( Object o ) {
if ( !(o instanceof D) ) // line 4
return false;
D other = (D)o; // line 6
return i == other.i;
}
int i;
}
}
我明白了:
C.java:4: illegal generic type for instanceof
if ( !(o instanceof D) )
^
我还收到关于第 6 行的“未经检查的演员表”警告。为什么? o 不是泛型类型——它只是一个普通的Object。如何通过检查并强制转换为D 的实例来正确实现equals()?
注意:显然,此代码示例是我实际代码的精简版本。 C 和 D 的真实类要大得多,D 是 private 的内部类 C 由其实现使用。
仅供参考:真正的D 确实使用了泛型参数T。
【问题讨论】:
-
您是否尝试过 instanceof C.D 而不是 instanceof D?
-
我只是要注意给出的示例 已损坏。
-
@Evan:行得通。但是为什么需要资格呢?
-
这可能是编译器错误 (forums.sun.com/thread.jspa?threadID=5300129)。
-
@Evan:很好的链接——谢谢!但是,如果您通读所有 cmets,我认为这不是一个错误……只是 Java 泛型的一个奇怪结果。