2013-06-07 7 views
8

私のチームメイトは私に、voidを返さない新しい練習方法を紹介します。Javaで無効にする代わりに自分自身を返すようにする

public class Test { 
    public Test doCalculations() { 
     //code 
     return this; 
    } 
    public Test appendTitle(String test) { 
     //code 
     return this; 
    } 
} 

voidを返す代わりに、オブジェクト自体を返すことを提案します。彼らが言うこのaproachの利点の1つは、あなたが方法を連鎖させることができます。代わりに、書き込みの

:このaproachの欠点かもしれない何

while(1) { 
    map.add(test.appendTitle("aaa").doCalculations()); 
} 

while(1) { 
    test.appendTitle("aaa"); 
    test.doCalculations(); 
    map.add(test); 
} 

あなたはよりエレガントなコードを書くことができますか?それを毎日の使用に含めることをお勧めしますか?

+3

私はあなたがデコレータのデザインパターンを調べることをお勧めします。もちろん、それをいつ適用するか考えるべきです。 –

+1

_fluent interface_と呼ばれます(しかし排他的ではありません)。すべての '.'の前に改行を付けることをお勧めします。 –

+0

私の防衛で私はこの質問を見つけませんでした: "利益.."また、質問は非常に謎めいて、私は多くの人々が何が起こっているのか分からないと思います。 –

答えて

2

私はそれが良い習慣ではないと言います。オブジェクトを返すメソッドのシグネチャを調べることによって、返されるインスタンスが完全に新しいインスタンスか、返されるインスタンスかどうかをどのように知ることができますか?変更されないクラスの場合は、メソッドの新しい インスタンスが返されます。クラス。

+4

クラスが 'Builder'あるいはそれに似たものであれば、それはかなり明確です。 – assylias

+0

Trueですが、この質問はそれよりも一般的なようです –

+1

実際には多くの設定オブジェクト、ビルダーオブジェクト、および地獄で使用されることは悪いことではありませんが、setterが1つ以上の呼び出しが可能な場所であれば、 2回。新しいインスタンスではなく、それ自体を返すことはかなり明白でなければなりません。それ以外の場合は、javadocは明示する必要があります。そのパターンを使用する例:Hibernate Criteria、Astyanax、Clouderaのhadoop設定など。確かに彼らの開発者はapiを開発することについて何かを知っているので、私の意見では受け入れられた答えは全く間違っています。 –

関連する問題