我有一些看起来像这样的代码:
Class<?> clazz = Class.forName(someClassName);
if(TargetClass.class.isAssignableFrom(clazz))
{
Class<? extends TargetClass> narrowClass = (Class<? extends TargetClass>)clazz;
// Use the narrowClass for stuff
}
这段代码给了我一个“未经检查的演员表”警告,可能是因为
isAssignableFrom
检查不算作“检查”。这里无法使用instanceof
,因为由于类型擦除,您无法检查运行时类型。有没有办法在没有编译器警告的情况下编写此代码?还是摆脱警告的唯一方法是将
@SupprssWarnings("unckeched")
添加到方法中? 最佳答案
使用以下方法:
Class<? extends TargetClass> narrowClass = clazz.asSubclass(TargetClass.class);
这是文档的Link。