나는 서로를 포함하고있는 두 클래스 사이에서 java에서 제네릭 관계를 생성하려고 시도하고있다. 객체는 필수적으로 alernating layer tree를 형성합니다. 지금까지 내가 발견 한 가장 가까운 SO 문제는 다음과 같습니다. Java generics of generics of. 제 문제에 가까와 다소 도움이되었지만 여전히 다른 지침을 원합니다. 게터와 세터를 넘어자바 제네릭 양방향 참조
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){...}
}
, 서로 그들이 특히 다른 만드는 클래스의 측면이 있지만, 포함은 그렇게 따라야합니다 : 여기에 오히려 상황이나이야, 내가 좋아하는 것 무엇을 할 수 .
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) –