我試圖在兩個包含對方的類之間的Java中創建泛型關係。這些對象本質上構成了一個漸變層樹。到目前爲止,我發現的最接近的SO問題是這樣的:Java generics of generics of,這對我的問題來說很接近並且有點幫助,但仍然不同,所以我想要額外的指導。這裏的情況或者說,想什麼我它是:Java泛型2路參考
abstract class Group<I extends Item<Group<I>>>{
private List<I> items;
public List<I> getItems(){...}
public void setItems(List<I> items){...}
}
abstract class Item<G extends Group<Item<G>>>{
private List<G> subGroups;
public List<G> getSubGroups(){...}
public void setSubGroups(List<G> subGroups){...}
}
除了getter和setter方法,有使它們彼此明顯不同類的方面,但列入應遵循這樣的。這背後的原因是,我想強制執行,如果我已經實現類,他們的行爲是這樣的:
class AGroup extends Group<AItem>{...} //works
class AItem extends Item<AGroup>{...} //works
class BGroup extends Group<BItem>{...} //works
class BItem extends Item<BGroup>{...} //works
class MixedGroup extends Group<AItem>{...} //fails since AItem does
//not extend Item<MixedGroup>
到目前爲止,編譯器是罰款
abstract class Group<I extends Item<Group<I>>>{
private List<I> items;
public List<I> getItems(){...}
public void setItems(List<I> items){...}
}
abstract class Item<G extends Group>{ //raw types warning
private List<G> subGroups;
public List<G> getSubGroups(){...}
public void setSubGroups(List<G> subGroups){...}
}
這主要包括什麼我在找,因爲我可以知道我可以得到一個組的物品的孩子組,並獲得相同類型的組。但編譯器不知道,如果我得到一個項目的組的項目,我會得到相同類型的項目(例如,該項目可能是一個孤兒)。此外,原始類型警告總是讓我覺得我做錯了什麼。另外,如果有更好的方法來執行這種類的綁定,我很樂意聽到它。
相關閱讀:[週期性泛型(嘗試2)](http://stackoverflow.com/questions/9423047/cyclical-generics-try-2) –