2009-03-29 2 views
4
기본 클래스가 재귀 자체 유형을 정의하는 클래스 계층 구조가 있다고 가정합니다. 다른 클래스를 선언하려면 어떻게해야합니까? T는 객체의 수명 기간 동안 다양 할 수 있으므로) A의 하위 클래스를 포함 할 수있는 필드? 다음과 작동하지 않습니다 : - 끝의 질문 - 난 왜 StackOverflow 회원의 경향이 특정 어려운 질문에 접근하는 것으로 나타났습니다 "왜 당신은 그 일을 처음부터하고 있니? " 다음은이 패턴의 사용에 대한 정당성입니다. Java 표준 라이브러리는 Enum 클래스 정의에서 재귀 자체 유형()을 사용합니다. 이 질문은 유사하게 "유형 의 필드를 정의하는 방법"으로 요청할 수 있습니다. 정렬 예제 : 하위 클래스가있는 : 병렬 클래스 계층 구조에 바인딩 : 그리고 Bifyer 인터페이스의 구현에 의해 관리되는 B 인스턴스 생성 : 이 인터페이스의 구현은 B에 대해 BSub1 또는 BSub2를 반환 할 수 있습니다. 이것은 기본적으로 Visitor 패턴의 응용 프로그램입니다. Bifyer는 방문자이지만 표준 방문자와 달리 accept 메서드는 void 대신 값을 반환합니다.이 메서드는 서로 다른 Bifyer 구현을 지정하여 Bify 메서드에 대한 대체 동작 및 반환 형식을 지정할 수 있습니다 (예 : 각 하위 클래스마다 하나씩) B.
+0

는 대신'' – newacct

답변

4

아래와 같이 와일드 카드를 바인딩하면 작동합니다.

public class B { 
    private A<? extends A> a; 

    public <T extends A<T>> void setA(T a) { 
     this.a = a; 
    } 
} 
+0

아, 감사합니다'를 확장>'바인딩을 사용할 필요가 없습니다! 나는 A <를 시도했다? extends A > 그러나 다른 순열이 하나는 나에게 일어나지 않았다! –

관련 문제