我有一个包含以下代码的equals()
方法:
if (other instanceof Peach<K, V>) {
...
}
但是,这不能编译。如何解决这一行代码?
答案 0 :(得分:2)
正如已经指出的那样,这是不可能的。我想补充一点,这是因为所谓的Type Erasure。官方Java教程具有以下简短摘要:
泛型被引入Java语言,以在编译时提供更严格的类型检查并支持泛型编程。为了实现泛型,Java编译器将类型擦除应用于:
- 如果类型参数不受限制,请用其界限或对象替换通用类型中的所有类型参数。因此,产生的字节码仅包含普通的类,接口和方法。
- 必要时插入类型强制转换以保持类型安全。
- 生成桥接方法以在扩展的泛型类型中保留多态。
类型擦除确保没有为参数化类型创建新的类;因此,泛型不会产生运行时开销。
这里的键是“因此,产生的字节码仅包含普通的类,接口和方法。” 。因此,无法instanceof
进行检查。
答案 1 :(得分:1)
简而言之,你不能。 Java会删除泛型类型,因此,在运行时,您不再有此信息。
您可以使用
if (other instanceof Peach) {
...
}