Class<? extends MyClass> cls = (Class<? extends MyClass>) Class.forName(className);
someMethod(cls); // someMethod expects a Class<? extends MyClass>
Run Code Online (Sandbox Code Playgroud)
上面的语句给出了一个警告"类型安全:未选中强制转换Class<capture#5-of ?>为Class<? extends MyClass>".
Class<?> cls0 = Class.forName(className);
if (cls0 instanceof Class<? extends MyClass>) {
Class<? extends MyClass> cls = (Class<? extends MyClass>)cls0;
someMethod(cls);
}
Run Code Online (Sandbox Code Playgroud)
这次我得到一个错误,因为类型擦除...
Class<?> cls0 = Class.forName(className);
if (MyClass.class.isAssignableFrom(cls0)) {
Class<? extends MyClass> cls = (Class<? extends MyClass>)cls0;
someMethod(cls);
}
Run Code Online (Sandbox Code Playgroud)
这次我知道演员阵容是安全的,但是编译器没有,并且仍然发出警告.(如果你问我,这里的编译器有点厚.)
有没有办法避免这种警告(SuppressWarnings除外)?
做你想做的事情的正确方法是:
Class.forName(className).asSubclass(MyClass.class);
Run Code Online (Sandbox Code Playgroud)