如何在没有警告的情况下转换java.lang.Class <! - ? - >类型的对象?

时间:2018-04-04 15:41:54

标签: java generics casting

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

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")添加到方法中?

1 个答案:

答案 0 :(得分:5)

使用以下方法:

 Class<? extends TargetClass> narrowClass = clazz.asSubclass(TargetClass.class);

以下是文档的specification