如何在JAVA中传递静态方法引用?

时间:2016-12-11 13:41:44

标签: java lambda functional-programming java-8 method-reference

我有一个名为Numbers的类,并且在一些static个方法中,它们代表基本操作,如加法,减法,乘法,除法。

现在我想创建一个名为operate的静态方法,它接收对前面解释的static方法的引用。我怎么能这样做?

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);
    }
}

1 个答案:

答案 0 :(得分:11)

您可能正在寻找一个BinaryOperator<T>,它代表对两个相同类型T的操作数的操作,返回与操作数相同类型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);

lambda表达式:

operate((l1, l2) -> Numbers.addition(l1, l2), 2, 2);

或方法参考:

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