返回类型的静态方法中的泛型似乎与继承相处得不好.请看下面的代码:
class ClassInfo {
public ClassInfo(Class clazz) {
this(clazz,null);
}
public ClassInfo(Class clazz, ClassInfo super C> superClassInfo) {
}
}
class A {
public static ClassInfo getClassInfo() {
return new ClassInfo(A.class);
}
}
class B extends A {
// Error: The return type is incompatible with A.getClassInfo()
public static ClassInfo getClassInfo() {
return new ClassInfo(B.class, A.getClassInfo());
}
}
我试图通过更改A.getClassInfo()的返回类型来规避这一点,现在错误弹出另一个位置:
class ClassInfo {
public ClassInfo(Class clazz) {
this(clazz,null);
}
public ClassInfo(Class clazz, ClassInfo super C> superClassInfo) {
}
}
class A {
public static ClassInfo extends A> getClassInfo() {
return new ClassInfo(A.class);
}
}
class B extends A {
public static ClassInfo extends B> getClassInfo() {
// Error: The constructor ClassInfo(Class, ClassInfo) is undefined
return new ClassInfo(B.class, A.getClassInfo());
}
}
这种严格检查静态方法的原因是什么?我怎么能相处?更改方法名称似乎很尴尬.