public class Test<T>{
public boolean isMember(T item) {
if(item instanceof Test)
{
return true;
}
return false;
}
}
这是检查项目是否是类的实例的正确方法吗?
我进行了一些搜索,似乎对于通用类,这不起作用。
public class Test<T>{
public boolean isMember(T item) {
if(item instanceof Test)
{
return true;
}
return false;
}
}
这是检查项目是否是类的实例的正确方法吗?
我进行了一些搜索,似乎对于通用类,这不起作用。
目前尚不清楚您要在这里测试什么,但这里有一些可能性:
item
一个T
?是的。否则,它可能无法传递到isMember
方法中。编译器将不允许它。(请参阅下面评论中 Alex 的警告。)是item
一个Test
?您isMember
编写的方法将对此进行测试,但我在这里感觉到代码异味。为什么你会期望 aT
也是 a Test
,但只是在某些时候?您可能需要重新考虑如何组织课程。此外,如果这确实是您想要的,那么您的方法可以写成:
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 的示例。
T
不是变量,而是在运行时定义的类的占位符。泛型是一个编译时特性,因此它们在编译时添加检查,这在运行时可能没有任何意义。我们只能检查运行时引用的对象的类型,它可能是代码中的超类类型。如果我们想将类型T
作为参数传递给方法,我们所要做的就是像下面这样显式地接近:
void genericMethod(Class<T> tClass) {
if(String.class.isAssignableFrom(tClass))
或者
void genericMethod(Class<T> tClass, T tArg) {
请注意,类型可能与此处的类型不同,我们可以看到如何操作:
genericMethod(Number.class, 1);
public class LinkList<T>{
public boolean isMemberOfClass(T item) {
if(item instanceof LinkList)
{
return true;
}
return false;
}
}
对不起,我不支持发布问题作为答案。
LinkList 类是一个泛型类。功能是检查项目是否属于该类。检查是否有相同的T。