1
public class GenericTest {
public static void main(String[] args) {
Manager<SlotA> mA = new Manager<SlotA>();
}
}
class Manager<SlotClass extends Slot> {
}
abstract class Slot {
public Slot(Manager<? extends Slot> m) {
}
}
class SlotA extends Slot {
public SlotA(Manager<SlotB> m) { //a constructor with Manager<SlotA> is not required!
super(m);
}
}
class SlotB extends Slot {
public SlotB(Manager<SlotA> m) { //a constructor with Manager<SlotB> is not required!
super(m);
}
}
上面是模擬我想要解決的問題的代碼。我的目標是強制執行Slot
必須的子類具有使用相同通用類型的管理器的構造函數。也就是說,SlotC
必須有一個構造函數SlotC(Manager<SlotC> m)
。從上面可以看出,SlotA
和SlotB
分別不需要SlotA(Manager<SlotA>)
和SlotB(Manager<SlotB>)
。擴展通用抽象類:正確綁定
我知道摘要Slot
的構造函數不符合此要求。我如何編輯上述代碼來實現這一目標?
編輯:
我知道我可以一個泛型參數T
添加到Slot
,使構造Slot<T>(Manager<T>)
但這意味着需要SlotA<SlotA>
和SlotA<SlotB>
是可能的。有沒有比這更好的方法?
附加說明:這就是爲什麼在最常用的示例中不允許繼承的原因:枚舉 - 它總是最終的。 – tilois 2015-02-23 20:38:15
偉大的答案,並感謝您的額外信息。這是解決方案。但是,這需要對'class Manager進行更改。 '班級經理>'這是正確的解決辦法?還是會打開任何其他通用問題? –
2015-02-23 20:40:22
將其更改爲'Manager>'。 –
2015-02-23 20:45:07