2016-09-28 2 views
0

지금은 구현 있어요 Tree<T> 추상 클래스 (<T> 루트 노드의 데이터 값을 참조) 현재이 같은있다 : 당신으로자바 추상 ​​클래스/인터페이스와 지정 유형 매개 변수

public abstract class Tree<T> { 
    public void setChild(int index, ??? childTree); 
    public void deleteChild(int index, ??? childTree); 
    public T getData(); 
    public void setData(T value); 
} 

을 나는 자식 나무에 대해 올바른 유형을 알아내는 데 어려움을 겪고 있습니다. 이상적으로,이

public abstract class Tree<T> { 
    public void setChild(int index, ImplementingClass childTree); 
    public void deleteChild(int index, ImplementingClass childTree); 
    ... 
} 

뭔가를 할 거라고하지만 (아마도 문서를 다시 읽어 것)이 작업을 수행하는 방법을 모르겠어요. 내가 생각하고있는 현재의 솔루션이

public abstract class Tree<T, C extends Tree> { 
    public void setChild(int index, C childTree); 
    public void deleteChild(int index, C childTree); 
    ... 
} 

그러나 더 정확한 솔루션 아이 트리 현재 트리와 같은 클래스로가 지정하는 것 같은 것입니다. Java에서 이것을 지정하는 방법이 있습니까?

+0

무엇이'T'입니까? – sidgate

+0

Java에는 자체 유형이 없습니다. 당신이 염두에두고있는 것은 대체로 정확합니다. 'Tree >'이어야합니다. – shmosel

+0

정말 동일한 구현이어야합니까? 매개 변수로 'Tree '이 충분하지 않습니까? –

답변

-1
Tree<T> 

의지 타입 T의 객체를 포함

Tree<String> tree; 

T는 다음

Tree<Tree<String>> 

가 추가 다른 제네릭 형식 설명을 할 수 또는

Public void setChild(int index, T child); 
public void deleteChild(int index, T child); 

에서 T 개체를 삭제할 수 있습니다 당신이 지정하고 싶다면 T를보다 제한적인 유형으로 바꾸십시오. 구현 방법이 없으면 추상 클래스를 인터페이스로 변경하십시오. 첫 번째 예제에서는

<T extends class> 
<T implements interface> 
<T super class> 

클래스가 다른 인터페이스를 한 번만 상속 할 수 있지만 여러 인터페이스를 구현할 수 있다는 것을 기억하십시오.

+0

아, 제네릭 유형 'T'를 사용하여 루트 노드의 데이터 값을 참조하고 싶습니다. 데이터 값 자체를 자식 트리로 가지는 것은 이미 자식 트리의 목록/컬렉션을 가지고 있기 때문에 혼란 스러울 것입니다. – Rdesmond

+0

ok 그렇다면 Tree 자식 트리가 같은 루트 유형을 가졌습니까? 아마도 Tree > – Tokazio