【发布时间】:2018-03-29 21:47:26
【问题描述】:
在 Java 中使用匿名类实现参数的惰性求值是否存在性能问题?似乎每次调用此代码时都会创建每个对象,然后它们都将被 GC。
例子:
a.func(
new Lazy1() {
public void func1() {
call1();
}
},
new Lazy2() {
public void func2() {
call2();
}
});
其中func 调用func1 或func2 取决于a 的某些字段。
【问题讨论】:
-
“是否存在任何性能问题”与“每次都会创建每个对象”是正交的。后者当然是正确的;但它是否是性能问题取决于它的使用方式。
-
这比
if/else语句慢得多,如果这就是你的意思的话。它对您的用例是否重要是另一个问题。 -
请注意,Java 从 Java 8 开始就有 lambda 表达式。Lazy 应该是一个 Runnable,两个 lazy 应该写成 lambda 表达式或方法引用。
标签: java