混淆从通用超类定义java子类

时间:2016-11-28 12:30:04

标签: java generics subclass superclass

我修改了一些在超级和子类中使用泛型的旧代码,并且在过去的几个小时里我一直在试图解决这个问题。

这是我的超类。它将跟踪超级检测和子检测,这可能是不同的类型,但都将扩展超类。

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的有效替代品。如果有人能指出我正确的方向,我会非常感激。非常感谢。

0 个答案:

没有答案