2011-10-26 2 views
1

カプセル化は継承よりも優れていると考えられています(有効なJavaやその他のソースに従う)、オブジェクトの転送というパターンがあります。 (私はDecoratorパターンは、このための同義語であると考えていますが、私が間違っている場合は私で叫ぶしないでください!)定型コードなしで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

(それが何かを拡張する場合は、すでにそのを持っていますメソッド - サブクラスを合成する目的は何ですか?ここで書いたものではなく、実装と新しいSomethingImplを意味しますか? –

答えて

2

+0

プロジェクトが既に存在する場合は、homespunバイトコードを無効にすることはお勧めしません。 –

4

TL; DR:いいえ、自明ではありません。それはJavaです。

ほとんどのIDEでこれを自動的に行うことができます。私は多くのことをしているときにコードを汚染するのを避けるために「定型のベースクリーン」に頼ってきました。

Lombok's@Delegate (docs)でも可能です。あなたが動的にcglib(またはasmのような類似した)との新しいサブクラスのためのバイトコードを書くようないくつかのトリックを行うことができますdynamic proxy classや具体的なクラスとを使用することができますインターフェイスで

関連する問題