【发布时间】:2020-05-14 12:02:10
【问题描述】:
我的课程结构如下:
interface Z {}
interface Y extends Z {}
interface X extends Y {}
private static class A<T extends Z> {}
private static class B<T extends Y> extends A<T> {}
private static class C extends B<X> {}
为什么第一个有效而第二个无效?
private Class<? extends A<? extends Z>> clazz = C.class; // valid
private Class<? extends A<? extends Z>> clazzb = B.class; // error: Type mismatch: cannot convert from Class<TEST.B> to Class<? extends TEST.A<? extends TEST.Z>>
我猜是因为Y 的类型在第二个示例中不清楚,但您如何才能澄清它?
谢谢
【问题讨论】:
-
可能是因为
B是泛型,其中T未定义,在C中,B 类型定义为X,因为您扩展了B<X> -
@Eklavya 是的,我想是的。虽然
B中的T未定义,但它必须至少为Y,因此应符合Z的条件。
标签: java class inheritance