maa*_*nus 13 java eclipse generics
我一直认为以下应该有效.我得到一个对象,我知道是Class<X>哪里X扩展一些类Xyz.为了使其类型安全,我想在下面的方法中使用Class.asSubclass:
private Class<? extends Xyz> castToXyzClass(Object o) {
final Class<?> resultClass = (Class<?>) o;
final Class<? extends Xyz> result = Xyz.class.asSubclass(resultClass);
return result;
}
Run Code Online (Sandbox Code Playgroud)
但是,在Eclipse中它不起作用,我看到的唯一解决方案是未经检查的强制转换.我敢打赌上面的代码必须工作,我已经使用过这样的东西......不知道这里有什么问题.
Mic*_*rdt 20
asSubclass()对它所调用的对象进行操作,而不是对其参数进行操作 - 不是习惯用的,而是读得很好.你必须这样做:
final Class<? extends Xyz> result = resultClass.asSubclass(Xyz.class);
Run Code Online (Sandbox Code Playgroud)
这asSubclass是一个令人困惑的名称,因为您没有获得表示子类的Class对象,您正在获取重新键入的相同类对象,以反映它是某个父类的子类.
事实上,这个方法是相当单一的目的(我认为你已经找到了它)...它是采用原始或通配类,并通过运行时检查获得更好的类型参数.当您的类型信息没有间隙时,不需要它:
class Super {}
class Sub extends Super {}
//...
Class<Sub> subClass = Sub.class;
//both work, but the latter introduces a redundant runtime check
Class<? extends Super> subOfSuper1 = subClass;
Class<? extends Super> subOfSuper2 = subClass.asSubclass(Super.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8366 次 |
| 最近记录: |