我有以下内容:
class Main {
static class TypeA<A> {}
static class TypeB<A, B> extends TypeA<A> {}
static <X> void aMethod(TypeA<X> a) {
if (a instanceof TypeB) {
TypeB<X, ?> b = (TypeB<X, ?>) a;
// Do stuff with b
}
}
public static void main(String[] args) {
aMethod(new TypeB<Integer, Object>());
}
}
我从TypeA<X>
到TypeB<X, ?>
获得了未经检查的投射警告。根据{{1}}的定义,名为X
的类型是相同的,因此我不明白为什么会失败。我可以通过投放TypeB
来丢失类型信息,但我需要保留TypeB<?, ?> b = (TypeB<?, ?>) a;
。
为什么我无法安全地从带有泛型参数的基类转换为具有相同泛型参数的子类?