interface Foo<T> {
T apply(T double1, T double2);
}
public class Test {
static void calculate(Double double1, Double double2, Foo<Double> func) {
double result = func.apply(double1, double2);
System.out.println(result);
}
public static void main(String[] args) {
double double1 = 100;
double double2 = 0.2;
calculate(double1, double2, new Foo<Double>() {
public Double apply(Double double1, Double double2) {
return double1 * (1+double2);
}
}::apply);
//^^^^^^^---- does it improve anything? (code will work without it)
}
}
我不懂语法的用法 ::apply
在匿名类构造的最后。我不明白为什么这不会导致编译错误,我也不明白它实现了什么。
如果你移除 ::apply
,程序运行正常。那么为什么在这个例子中使用双冒号呢?
1条答案
按热度按时间mctunoxg1#
这的确是一个拙劣的用法
::
接线员。显式构造匿名Foo<Double>
示例只是为了转身使用::apply
提取apply()
实现并创建第二个匿名函数对象。它同时使用两个等价的成语。一个就行了。正如你所说的,不谈更明智
::apply
直接使用匿名对象:或者抛弃匿名者
Foo<Double>
类并使用100%lambda语法:我更喜欢后者,因为它要简洁得多。