我修改了一些在超级和子类中使用泛型的旧代码,并且在过去的几个小时里我一直在试图解决这个问题。
这是我的超类。它将跟踪超级检测和子检测,这可能是不同的类型,但都将扩展超类。
public class Superclass<T extends Superclass<T,U>, U extends Superclass<T,U>> {
private Vector<T> subDetections;
private Vector<U> superDetections;
public Superclass() {
subDetections = new Vector<T>();
superDetections = new Vector<U>();
}
public void addSub(T sub) {
subDetections.add(sub);
}
public void addSup(U sup) {
superDetections.add(sup);
}
}
还有一个用于增加功能的通用类:
public class SubclassA<T extends Superclass<T,U>, U extends Superclass<T,U>> extends Superclass<T, U> {
public SubclassA() {
super();
}
}
以下是2个具体课程:
public class SubclassB extends Superclass<SubclassB, SubclassB> {
public SubclassB() {
super();
}
}
public class SubclassB2 extends Superclass<SubclassB2, SubclassB2> {
public SubclassB2() {
super();
}
}
我需要做的是定义扩展SubclassA的SubclassC,但是将第一个参数(泛型T)定义为SubclassB,同时保持第二个参数的通用性。像这样:
public class SubclassC extends SubclassA<SubclassB, ???what goes here???> {}
我在SubclassB上遇到了一个绑定不匹配的问题,我甚至不知道该放在第二位。
我还需要创建一个SubclassA实例,它将包含一个SubclassB对象和一个SubclassB2对象,但不能解决这个问题:
SubclassA<SubclassB, SubclassB2> subA = new SubclassA<SubclassB, SubclassB2>();
再次绑定不匹配错误。我不明白为什么SubclassB / SubclassB2不是Superclass的有效替代品。如果有人能指出我正确的方向,我会非常感激。非常感谢。