在 Java 中将泛型子类型类信息传递给超类
长期以来,我一直在Java中使用一个成语,用于在其(通常是抽象的)祖先类(es)的方法中使用(非抽象)类的类信息(不幸的是,我找不到此模式的名称):
public abstract class Abstract<T extends Abstract<T>> {
private final Class<T> subClass;
protected Abstract(Class<T> subClass) {
this.subClass = subClass;
}
protected T getSomethingElseWithSameType() {
....
}
}
其子类的示例:
public class NonGeneric extends Abstract<NonGeneric> {
public NonGeneric() {
super(NonGeneric.class);
}
}
但是,我在定义子类时遇到了麻烦,该子类具有自己的泛型参数:Abstract
public class Generic<T> extends Abstract<Generic<T>> {
public Generic() {
super(Generic.class);
}
}
此示例不可编译。同样,不能使用例如 甚至使用通配符,如 .Generic<T>.class
Generic<?>
我还尝试将超类中泛型类型的声明替换为 ,但这也不是可编译的。T
? extends T
有没有办法让这个模式与泛型基类一起工作?