下面是实现lambda以执行各种任务的代码段。
package lambda;
public class Test {
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.operate(1, 2, (a, b) -> a * b));
}
private int operate(int a, int b, Calculation method) {
return method.operation(a, b);
}
interface Calculation {
int operation(int a, int b);
}
}
现在的问题是,我的操作方法何时何地获得内存?当我使用 t.operate 方法使用t.operate时,当参数(a,b)中的lambda获得内存时。还有,java中的随需应变函数是什么?
发布于 2020-07-08 13:57:28
匿名内部类只为实例变量分配堆内存。将匿名内部类与lambda表达式之间的堆使用情况进行直接比较,只有在这里只考虑具有单个重写方法且不包含实例变量的匿名内部类时,才有意义。然后,匿名内部类以及lambda表达式将不需要或在堆中获得任何内存。只有当重写方法的函数调用发生时,才会在堆栈上分配该方法的参数和局部变量的内存。然后,内存分配的时间没有差别,分配的RAM数量也几乎没有差别(在lambda表达式中,没有引用这一点和外部类的实例)。
关于按需函数:不确定,但可能是函数生成器(一种特定的函数编程设计模式)。这是一个函数,它根据输入参数返回多个可能的函数中的一个或参数化的函数。在Java中,这将是一个返回特定接口对象(例如lambda表达式)的方法。
https://stackoverflow.com/questions/61896215
复制相似问题