我在https://dzone.com/articles/supplier-interface上看到了一些使用供应商界面的例子.
我的问题是,如果在上面的例子中,我可以做一些简单的事情:
driveVehicle(new Vehicle());
driveVehicle(new Car());
Run Code Online (Sandbox Code Playgroud)
为什么要使用供应商界面,如果它只是调用方法,而不接受任何参数.
例如,我有这个接口:
package tester;
public interface Calculator{
public int calculate(int a,int b);
}
Run Code Online (Sandbox Code Playgroud)
要么
package tester;
@FunctionalInterface
public interface Calculator{
public int calculate(int a,int b);
}
Run Code Online (Sandbox Code Playgroud)
我也可以将第一个视为功能界面.例如 :
package tester;
public class A {
int a;
int b;
int sum;
A(Calculator c,int e, int d){
a=e;
b=d;
sum =c.calculate(a, b);
}
int get(){
return sum;
}
}
Run Code Online (Sandbox Code Playgroud)
班长
package tester;
public class runner {
public static void main(String a[]){
System.out.println(new A((x,b)-> (x+b),1,2).get());
}
}
Run Code Online (Sandbox Code Playgroud)
代码可以使用或不使用注释,那么为什么注释呢?为什么不能说任何具有单一方法的接口都可以作为功能接口?
Function<Double,Integer> f1=(d)-> {
if(d>5)
return 0;
return 1;
};
DoubleToIntFunction f2=(d)-> {
if(d>5)
return 1;
return 0;
};
double d=5.0;
f1.apply(d);
f2.applyAsInt(d);
Run Code Online (Sandbox Code Playgroud)
将f1优化为DoubleToIntFunction(有些像f2).