java - 检查项目是否是泛型类的实例

标签 java class generics instanceof

public class Test<T>{

    public boolean isMember(T item) {

        if(item instanceof Test)
        {
            return true;
        }
        return false;
    }
}

这是检查项目是否是类实例的正确方法吗?

我进行了一些搜索,似乎对于通用类来说,这行不通。

最佳答案

不清楚您要在这里测试什么,但这里有一些可能性:

  1. item一个T ?是的。否则,它可能无法传递到 isMember 中。方法。编译器会不允许它。 (请参阅下面评论中亚历克斯的警告。)
  2. item一个Test ?你的isMember编写的方法将对此进行测试,但我在这里感觉到代码的味道。为什么你会期待 T也是一个Test ,但只是某些时候?您可能需要重新考虑如何组织类(class)。此外,如果这确实是您想要的,那么您的方法可以写成:

    public boolean isMember(T item) {
        return (item instanceof Test);
    }
    

    这引出了一个问题:为什么首先要有这样的方法?哪个更容易写?

    if(obj instanceof Test) {...}
    

    if(Test<Something>.isMember(obj)) {...}
    

    我认为第一个方法更简单,而且大多数 Java 开发人员会比自定义方法更容易理解它的含义。

  3. item一个Test<T> ?在运行时无法知道这一点,因为 Java 使用删除实现泛型。如果这是您想要的,您必须将方法签名修改为类似于 Mike Myers 的示例。

关于java - 检查项目是否是泛型类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12162432/

相关文章:

java - ImageJ .JAR 文件中的 NeuronJ 插件无法在 MAC OSX10.10.4 上打开

java - Spring Boot 应用程序无法在 Elastic Beanstalk 上启动

java - 请求基类中的方法

javax.sql.DataSource 无法解析符号

java - 不兼容的类型在 Java 中初始化泛型类型的堆栈

java - 关闭 JDialog 时没有 WindowEvent

Java信任库

java - 我可以在类中存储一些方法并在另一个 Activity 中使用它们吗?

c# - 通用可空枚举

generics - 是否可以从函数中返回具有随机类型的泛型结构