2017-12-11 11 views
0

Java 8では、引数を返すものを作成するか、引数がnullの場合はインスタンスを作成します。Java 8、静的メソッドvs関数

静的メソッドまたはUnaryOperatorを作成することでこれを行うことができます。次のアプローチは、技術的には同じであるか、私はアプローチのいずれかで知っておくべき技術的な違いがあります:

静的メソッド

static Cat initOrReturn(Cat c) { 
    if (c==null) { 
     return new Cat(); 
    } 
    return c; 
} 

機能

UnaryOperator<Cat> initOrReturn = c -> { 
    if (c==null) { 
     return new Cat(); 
    } 
    return c; 
} 
+1

Re、 "... ...ストリームで使用できました"それはあなたの問題を解決するのに役立つでしょうか?それとも、あなたが問題を解決しようとしている他のソフトウェア開発者を助けるでしょうか?開発者に意見を求めていますが、その意見はあなたが解決しようとしている問題に依存することになります。 –

+0

P.S.、 "function"ではなく、 "functional object"と言うこともできます。 –

+0

'c - > c == nullですか?新しいCat():c'は再利用性のさまざまな方法について議論する価値がありますか? – Holger

答えて

0

まず、あなたのコードは、構文エラーがあり、2番目のブロックの最初の行にc{の間には->

第2のオブジェクトは無関係のオブジェクトを作成します。最初のオブジェクトは静的メソッドを作成するだけです。
彼らは同じではありません。

また、静的メソッドをストリームAPIで使用できます。
お持ちの場合:

class A { 
    static Object a(Object x) { return x; /* replace with your code */ } 
} 

をあなたがすることができます:それは世界的に見えますので、メソッドを作成する

xxxList().stream().map(A::a) 

は、多くの場合、汚れたと考えられています。
変数を宣言せずにラムダ式を使用することをお勧めします。

+0

どのアプローチを採用するかを決定する際に技術的な考慮事項のように聞こえるのは、Functionが追加のオブジェクトを作成するということだけです。これが問題であれば、静的メソッドを使用しますか? それ以外の場合は、両方とも読みやすく、目的を達成し、ストリームで使用できます。 –

+0

メソッドの作成は、グローバルに表示されるため、多くの場合、ダーティと見なされます。 – ice1000

+0

plsを精巧に考えてもらえますか?両方のアプローチで可視性修飾子を追加することで可視性制限が許可されるわけではありません。プライベートなど? –

関連する問題