我有兩個抽象類: 集裝箱,節點互補泛型類
一種容器總是包含相同類型的節點,以及一種節點將只屬於其相應的容器: NodeTypeA存儲在ContainerTypeA中,Node中沒有其他的子類存儲在它中。 NodeTypeB存儲在ContainerTypeB中,Node中沒有其他子類存儲在其中。從Node到它的容器的反向引用也應該知道容器的類型,所以這個關係是雙向的。
我在Java中實現這個問題。
我不喜歡這樣寫道:
Container<C extends Container<C,N>, N extends Node<C,N>>
Node<C extends Container<C,N>, N extends Node<C,N>>
然而,當我定義在容器中的以下字段,我得到一個錯誤:
private List<N> nodes;
該錯誤消息說我應該代替n與節點。這對我來說似乎是多餘的。爲什麼會發生這種情況,我怎麼可以讓程序知道,
N
應該等於
Node<C,N>
測試用例:
這背後的目的:
有許多不同種類的節點和許多不同的方式,他們可以互動。但是,他們有一些共同的主題。容器和節點應該是抽象類,我可以在其中定義方法和抽象方法來定義這些常見主題。 ContainerA和NodeA一起將定義一種特定的交互方法。我用這個仿製藥,因爲編程變得容易得多,如果我的IDE是足夠聰明,知道在ContainerA任何節點總是在NodeA上,和NodeA上的主人總是一個ContainerA,所以我能避免一些不必要的類型轉換。
(注:這個問題是類似的,但不等於Complementary generic types)從幾個微不足道的錯誤(abstract
什麼是確切的錯誤信息?你能包括一個最小的,但完整的類,導致這個錯誤? – Thilo
似乎很好:http://ideone.com/m1Qi2n。請構建一個[最小測試用例](http://stackoverflow.com/help/mcve)。 –
最小測試用例:https://ideone.com/wam0gi –