我有幾個predifined靜態的 「處理器」 的實施同樣的方法,例如:靜態引用(帶::)的方法返回一個接口
default double process(double num){
樣品:
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));
}
...
現在想象我有一些可以提供額外「處理器」列表的對象。
我試圖用interface
來定義那些額外的「處理器」。
static interface IProcessor{
double process(double num);
}
執行額外的 「處理器」 的對象:
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;
}
};
}
}
在這裏一切編譯和工作正常。但現在我卡住了。
使用SomeObject::getExtraProccessors
我有一個關於返回接口的靜態方法的參考,我該如何調用接口的方法?
我第一次嘗試用
test(SomeObject::getExtraProccessors::process, 1d);
但是,這並不編譯給人一種The target type of this expression must be a functional interface
所以,請你能告訴我,如果有可能這一點,如果是如何? 如果這是不可能的,我應該如何呢?
您可以使用'DoubleUnaryOperator'而不是'Function Double,Double>'而不是' IProcessor'。 –
您不需要創建一個匿名的IProcessor內部類實例,而是返回一個lambda:'return n - > n * 30;'。如果你需要一個列表:返回'Arrays.asList(n - > n * 30,n - > n/2,...)'。另外,正如@PaulBoddington所說的那樣,'DoubleUnaryOperator'是Java提供的一個接口,用於操作一個'double'操作數。 –