假设我有一节课:
public class GClass implements GInterface<Impl> {
// other code
@Override
public Class<SomeClass> getType() {
return SomeClass.class
}
}
实现泛型接口的:
public interface GInterface<T extends OtherClass> {
// other code
Class<SomeClass> getType();
}
然后我调用getType():
GInterface gi = new GClass();
Class<SomeClass> type = gi.getType(); // <- gives warning
我在这里得到警告有什么意义呢?getType()
的结果不是泛型的(它没有使用泛型类型参数T),而是静态定义为Class<SomeClass>
.因此,编译器应该知道Class<SomeClass> type = gi.getType()
是getType()
%安全的,对吗?
我错过什么了吗?
我预计电话:Class<SomeClass> type = gi.getType()
不会产生任何警告.
UPDATE:
我现在发现它与类型参数gi
有关.
这会生成警告(我的问题是为什么?):
GInterface gi = new GClass();
Class<SomeClass> type = gi.getType(); // <- gives warning
不会发出警告:
GInterface<?> gi = new GClass();
Class<SomeClass> type = gi.getType(); // <- Doesnt give warning