All*_*Kll 8 java generics casting
我是Generics的新手,我遇到了一个问题.
请考虑以下代码:
public class A {}
public class B extends A {}
public <T extends A> T getB()
{
A test = new B();
Class<B> clazz = B.class;
if (clazz.isInstance(test))
{
return (T)test;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
这会生成一个未经检查的强制转换警告.就return (T)test;
行了.但显然我正在用if (clazz.isInstance(test))
线条检查类型.
有没有办法进行"检查演员表"?
我不打算只是压制警告但实际上是实施了一次检查.不幸的是,我无法找到有关如何执行检查演员表的信息.
Jon*_*eet 14
有没有办法进行"检查演员表"?
当然,虽然重要的是要注意它在这里并没有真正帮助你,因为你的方法B
在一些地方被硬编码使用.您可以使用以下命令执行演员:
clazz.cast(test)
Run Code Online (Sandbox Code Playgroud)
......但是那会投B
,而不是T
.特别是假设我跑了:
public class C extends A {}
...
C c = foo.<C>getB();
Run Code Online (Sandbox Code Playgroud)
您希望如何工作?
您可能希望将代码更改为:
public <T extends A> T getB(Class<T> clazz)
{
A test = // get A from somewhere
return clazz.isInstance(test) ? clazz.cast(test) : null;
}
Run Code Online (Sandbox Code Playgroud)
那很好,因为clazz.cast
会返回一个类型的值T
,你可以返回.
归档时间: |
|
查看次数: |
8338 次 |
最近记录: |