2011-10-26 2 views
1

캡슐화는 (유효 자바 및 기타 소스에 따라) 상속보다 나은 것으로 간주되므로 객체 전달의 패턴이 있습니다. (I는 데코레이터 패턴이 동의어입니다 생각하지만, 내가 틀렸다면 날 소리하지 마십시오!)보일러 플레이트 코드없이 Java에서 전달 객체 패턴을 구현하는 방법이 있습니까?

기본적으로,이 같은 코드 쓰기 :

class public ForwardSomething extends Something { 
    private Something something=new Something(); 
    public void somethingMethod1(){return something.somethingMethod1();} 
    public void somethingMethod2(){return something.somethingMethod2();} 
    /*Do same for the methods for all methods of Something that exist when you wrote  Forward Something.*/ 
} 

그래서 많은 거기를 상용구 코드의 그리고 우리 모두는 "자신을 반복하지 마십시오"가 이상적이라는 것을 알고 있습니다. 상용구 코드를 포함하지 않는이 문제에 접근하는 좋은 방법이 있습니까?

+0

(당신이 이미있다 cglib으로 새로운 서브 클래스의 바이트 코드를 작성하는 등의 메서드 - 하위 클래스를 합성하는 목적은 무엇입니까? 여기에 작성된 것보다는 도구 및 새로운 SomethingImpl을 의미합니까?) –

답변

2

당신이 사용할 수있는 dynamic proxy class 또는 당신이 어떤 속임수를 할 수있는 구체적인 클래스로 동적으로 뭔가를 확장하는 경우 (또는 이와 유사한 같은 asm)

+0

프로젝트가 이미 존재할 때 homespun 바이트 코드 배반은 권장하지 않습니다. –

4

TL; DR : 아니오, 그리 많지 않습니다. 그것은 자바입니다.

대부분의 IDE에서 자동으로이 작업을 수행 할 수 있습니다. 나는 코드를 오염시키지 않기 위해 "보일러 플레이트 (boilerplate baseclasses)"에 의지했습니다. 많은 작업을 수행 할 때 실제 작동합니다.

Lombok's@Delegate (docs)을 사용할 수 있습니다. 인터페이스와

관련 문제