2011-04-19 2 views
1

Java에서 2 개의 병렬 유형 계층 구조를 생성하는 몇 가지 현명한 방법이 있는지 궁금합니다. 예를 들어 XType이 있습니다. XType에는 유형의 트리가 있습니다 (약 10-20, 일부 플랫, 일부는 3 레벨).해당 유형 트리

XType 
\ 
+ AXType 
| \ 
| + AAXType 
| 
+ BXType 
...... 

이제는 해당 계층 구조를 갖고 싶지만 몇 가지 추가 속성이있는 상황이 있습니다. AAXTypeWithProperty이 ... 부모 AXTypeWithPropertyAAXType을 가지고 물론이 루트에 XType와 함께 첫 번째 트리에 모든 것을 접어 추가 할 수 있습니다에 대한 그래서 XTypeWithProperty, AXTypeWithProperty는 ...

이제 단일 상속이 이후

, 그것은 불가능 .getProperty() 메서드를 사용하면 해당 형식이없는 형식에 대해 null을 반환 할 수 있습니다.

하지만 여기서는 Java에서 관리 할 수있는 유형 안전 형 솔루션을 찾고 싶습니다. 나는 제네릭 타입 XType<WithProperty>XType<NoProperty>을 만들고 그것들과 함께 작동하는 것과 같은 것에 대해 생각했다. 그러나 유지 보수는 약간 번거로운 것처럼 보인다.

더 좋은 방법이 있습니까?

+0

'AXType'과'AXTypeWithProperty '유형의 유일한 차이점은 여분의 getter와 setter가 있다는 것입니다. –

답변

2

fragile base class problem의 문제를 해결하는 데 도움이되는 adapter pattern에 관심이있을 수 있습니다. Eclipse IDE는 이것을 Java 모델 트리와 Resource 모델 트리를 유지 보수 한 다음 두 트리 사이에서 요소를 적용하는 데 내부적으로 사용합니다. 또는 Guice 또는 AspectJ을 사용하여 주입을 볼 수 있습니다.

+0

아주 좋은 대답. 타이핑을 좀 덜어 주다. – sehe

0

여기에서 위임을 사용해야합니다. 예 :

public class WithProperty<T extends XType,P> { 
    private T object; 
    private P property; 

    public WithProperty(T obj) { 
     this.object = obj; 
    } 

    public T getObject() { 
     return object; 
    } 

    public P getProperty() { 
     return property; 
    } 

    public void setProperty(P property) { 
     this.property = property; 
    } 
} 
0

기본적으로 혼합 클래스입니다.

일반 자바에서

, 유지 mixin이 불가능하고, 표준 Java 솔루션은

을 (다른 답변을 참조) 전략 또는 어댑터 패턴을 사용하는 것입니다 또는 당신은 "진짜"이나 mixin

public interface Foo{ 
    void isItTrue(); 
} 
public aspect MixinAspect{ 
    interface FooMixin extends Foo{} 
    public void FooMixin.isItTrue(){ 
     System.out.println("Yup, I'm a mixin"); 
    } 
    declare parents: com.yourpackage..* implements Mixin; 
} 
를 생성하기 위해 AspectJ를 사용할 수 있습니다

com.yourpackage의 모든 클래스는 Foo을 구현하며 동일한 기본 동작을 공유합니다.

관련 문제