Class<? extends MyClass> cls = (Class<? extends MyClass>) Class.forName(className);
someMethod(cls); // someMethod expects a Class<? extends MyClass>
上述语句发出警告:“类型安全性:从
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);
}
这次我遇到了一个错误,是由于类型擦除所致...
Class<?> cls0 = Class.forName(className);
if (MyClass.class.isAssignableFrom(cls0)) {
Class<? extends MyClass> cls = (Class<? extends MyClass>)cls0;
someMethod(cls);
}
这次我知道cast是安全的,但编译器不知道,仍然会给出警告。(如果你问我,编译器在这里有点笨。)
除了SuppressWarnings之外,有没有避免此警告的方法?
Class
是特殊的,因为它代表了自己的类型参数。 - biziclop@SuppressWarnings
是解决这个问题的方法,或者更好的一步是使用这个,它完全做了与你的代码相同的事情。 - biziclop