Nin*_*uah 9 java generics class instanceof
public class Test<T>{
public boolean isMember(T item) {
if(item instanceof Test)
{
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
这是检查项目是否是该类实例的正确方法吗?
我经历了一些搜索,似乎对于泛型类,这不起作用.
目前还不清楚你要在这里测试什么,但这里有几个可能性:
item一个T?是.否则,它可能无法传递给isMember方法.编译器会禁止它.(请参阅以下评论中的Alex警告.)是item一个Test?你isMember编写的方法会对此进行测试,但我在这里感觉到代码味道.为什么你会期望a T也是一个Test,但只有一些时间?您可能想重新考虑如何组织课程.此外,如果这真的是你想要的,那么你的方法可以写成:
public boolean isMember(T item) {
return (item instanceof Test);
}
Run Code Online (Sandbox Code Playgroud)
这引出了一个问题:为什么首先要有这样的方法?哪个更容易写?
if(obj instanceof Test) {...}
Run Code Online (Sandbox Code Playgroud)
要么
if(Test<Something>.isMember(obj)) {...}
Run Code Online (Sandbox Code Playgroud)
我认为第一个更简单,并且大多数Java开发人员将比自定义方法更容易理解它意味着什么.
是item一个Test<T>?在运行时无法知道这一点,因为Java使用擦除来实现泛型.如果这是你想要的,你将不得不修改方法签名,就像迈克迈尔斯的例子.
| 归档时间: |
|
| 查看次数: |
7842 次 |
| 最近记录: |