public class Test<T>{
public boolean isMember(T item) {
if(item instanceof Test)
{
return true;
}
return false;
}
}
这是检查项目是否是类实例的正确方法吗?
我进行了一些搜索,似乎对于通用类来说,这行不通。
最佳答案
不清楚您要在这里测试什么,但这里有一些可能性:
- 是
item
一个T
?是的。否则,它可能无法传递到isMember
中。方法。编译器会不允许它。 (请参阅下面评论中亚历克斯的警告。) 是
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 开发人员会比自定义方法更容易理解它的含义。
是
item
一个Test<T>
?在运行时无法知道这一点,因为 Java 使用删除实现泛型。如果这是您想要的,您必须将方法签名修改为类似于 Mike Myers 的示例。
关于java - 检查项目是否是泛型类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12162432/