Gui*_*rré 12 java java-8 functional-interface method-reference
我有几个实现相同方法的预定义静态"处理器",例如:
default double process(double num){
Run Code Online (Sandbox Code Playgroud)
样品:
public class Test {
public static void main(String[] args) {
test(Test::processor1, 1d);
test(Test::processor2, 1d);
}
static double processor1(double num){
return num * 10;
}
static double processor2(double num){
return num * 20;
}
//...
static void test(Function<Double, Double> f, double d){
// Do something util here
System.out.println(f.apply(d));
}
...
Run Code Online (Sandbox Code Playgroud)
现在假设我有一些对象可以提供额外的"处理器"列表.
我正在尝试使用a interface来定义那些额外的"处理器".
static interface IProcessor{
double process(double num);
}
Run Code Online (Sandbox Code Playgroud)
使用附加"处理器"实现对象:
static class SomeObject{
// Just return one but should be a list...
static IProcessor getExtraProccessors(){
return new IProcessor(){
public double process(double num){
return num * 30;
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,一切都编译并正常工作.但是现在我被卡住了.
使用SomeObject::getExtraProccessors我有一个返回接口的静态方法的参考,我如何调用接口的方法?
我的第一次尝试是
Run Code Online (Sandbox Code Playgroud)test(SomeObject::getExtraProccessors::process, 1d);
但这不会编译给出一个 The target type of this expression must be a functional interface
那么请你告诉我是否可以这样做,如果是的话怎么样?如果不可能,我应该怎么做?
test(SomeObject.getExtraProccessors()::process, 1);
Run Code Online (Sandbox Code Playgroud)
SomeObject.getExtraProccessors()返回功能接口的实例IProcessor.SomeObject::getExtraProccessors是类的静态方法getExtraProccessor的方法引用SomeObject.