我有一个名为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);
}
}
答案 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);