2016-12-11 18 views
1

私は、Numbersと呼ばれるクラスと、加算、減算、乗算、除算などの基本的な操作を表すstaticメソッドの内部にあります。JAVAで静的メソッド参照を渡す方法は?

ここで説明したstaticメソッドの参照を受け取るoperateという静的メソッドを作成します。どうやってやるの?

public class Numbers { 
    public static long addition(long x, long y) { 
     return x + y; 
    } 

    public static long operate(/*a reference to a static method in Numbers class*/, 
           long x, long y) { 
     return reference(x, y); 
    } 
} 
+4

ヒント:met hodの名前は、 "追加"の代わりに "追加"のような動詞でなければなりません。 – GhostCat

答えて

11

あなたはおそらくオペランドと同じ型Tの結果を返す同じタイプTの二つのオペランド時の動作を表しBinaryOperator<T>を探しています:あなたが見ることができるように

public static long operate(BinaryOperator<Long> binaryOperator, long x, long y) { 
    return binaryOperator.apply(x, y); 
} 

を、メソッド宣言にメソッド参照はありません。

匿名クラス:

operate(new BinaryOperator<Long>() { 
    public @Override Long apply(Long l1, Long l2) { 
     return Numbers.addition(l1, l2); 
    } 
}, 2, 2); 

ラムダ式:

operate((l1, l2) -> Numbers.addition(l1, l2), 2, 2); 
後であなたが 実パラメータは、メソッドの呼び出し時に渡すために何を決定され、そこにパラメータの型を定義する必要があります

またはメソッドリファレンス:

operate(Numbers::addition, 2, 2); 
+2

すべての操作が基本的に「long」の場合は、[LongBinaryOperator](https://docs.oracle.com/javase/8/docs/api/java/util/function/LongBinaryOperator)を使用する方がよい場合があります。 .html)代わりにボクシングを避けるために。 – Hulk

関連する問題