如何在泛型类上测试instanceof?

时间:2018-11-15 17:42:16

标签: java generics instanceof

我有一个包含以下代码的equals()方法:

if (other instanceof Peach<K, V>) {
    ...
}

但是,这不能编译。如何解决这一行代码?

2 个答案:

答案 0 :(得分:2)

正如已经指出的那样,这是不可能的。我想补充一点,这是因为所谓的Type Erasure。官方Java教程具有以下简短摘要:

  

泛型被引入Java语言,以在编译时提供更严格的类型检查并支持泛型编程。为了实现泛型,Java编译器将类型擦除应用于:

     
      
  • 如果类型参数不受限制,请用其界限或对象替换通用类型中的所有类型参数。因此,产生的字节码仅包含普通的类,接口和方法。
  •   
  • 必要时插入类型强制转换以保持类型安全。
  •   
  • 生成桥接方法以在扩展的泛型类型中保留多态。
  •   
     

类型擦除确保没有为参数化类型创建新的类;因此,泛型不会产生运行时开销。

这里的键是“因此,产生的字节码仅包含普通的类,接口和方法。” 。因此,无法instanceof进行检查。

答案 1 :(得分:1)

简而言之,你不能。 Java会删除泛型类型,因此,在运行时,您不再有此信息。

您可以使用

if (other instanceof Peach) {
    ...
}