在反射中摆脱未经检查的演员表

Nar*_*hai 3 java reflection

我正在使用classloader加载一个类,它返回我Class<?>,现在我想将类传递给另一个方法或函数Class<? extends SomeClass>.

现在,当我尝试施放时:

Class<?> clazzFromClassLoader = Class.forName(nameOfClass);
Class<? extends Someclass> clazz = (Class<? extends SomeClass>)clazzFromClassLoader;
//second line gives unchecked cast warning
Run Code Online (Sandbox Code Playgroud)

我可以通过使用确保没有类强制转换异常

SomeClass.isAssignableFrom(clazzFromClassLoader);
Run Code Online (Sandbox Code Playgroud)

但有没有办法摆脱未经检查的演员表?

rua*_*akh 8

是的:你可以写:

Class<? extends Someclass> clazz =
    clazzFromClassLoader.asSubclass(Someclass.class);
Run Code Online (Sandbox Code Playgroud)

(有关更多信息,请参阅asSubclassJavadoc.)