我有一些看起来像这样的代码:

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

09-30 21:42