【发布时间】:2017-10-30 01:27:32
【问题描述】:
我有一个关于没有代码重复的 lambda 表达式的可重用性的问题。例如,如果我有一个辅助方法,我可以轻松地将其编码为静态方法,并且可以从其他类中引用它而无需重复代码。这在 lambda 表达式中如何工作? 示例:我编写了以下静态方法
public class MyUtil {
public static int doubleMe(int x) {
return x * 2;
}
}
我可以在整个项目的多个地方重复使用相同的方法,而无需重复代码
public class A {
public void someOtherCalculation() {
MyUtil.doubleMe(5);
}
}
public class B {
public void myCalculation() {
MyUtil.doubleMe(3);
}
}
当涉及到 lambda 函数时,它是如何工作的,编写一次函数并在多个类中使用相同的函数。
Function<Integer, Integer> doubleFunction = x -> x * 2;
在我的示例中,我将在哪里编写上述 lambda 函数以及如何在 A 类和 B 类中重用相同的函数?
【问题讨论】:
-
“代码重用”在这里是一个错误的目标。需要代码表现力。使用不“重用”代码的 lambda 有什么可能的危害,你有什么证据表明它没有?当许多不同的函子可以在算法中替代时,Lambdas 是适用的。你会为所有这些都写一个显式的静态方法,并为每个方法创建一个方法引用,这样你就可以说,“看,妈妈,我正在使用 lambdas!”?在这种情况下按惯例使用 lambda 不是更有意义吗?您寻求的真正工程效益是什么?
-
如果要复用一个函数,那么定义一个实现Function接口的类。静态方法不是函数。
标签: java lambda functional-programming java-8 static-methods