我有一些看起来像这样的代码:
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")
添加到方法中?
答案 0 :(得分:5)
使用以下方法:
Class<? extends TargetClass> narrowClass = clazz.asSubclass(TargetClass.class);
以下是文档的specification。