有没有办法将类转换为具有特定参数的java.lang.Class<>通用?

时间:2015-05-26 17:56:39

标签: java generics

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);
}

这次知道演员阵容是安全的,但编译器没有,但仍然会发出警告。 (如果你问我,这里的编译器有点厚。)

有没有办法避免这种警告(SuppressWarnings除外)?

1 个答案:

答案 0 :(得分:4)

正确的做法是:

Class.forName(className).asSubclass(MyClass.class);