【发布时间】:2014-06-16 08:31:25
【问题描述】:
我经常写下面这样的代码。
class SomeClass {
private final Executor executor = new Executor();
void doSomething() {
executor.execute(new ExecutionListener() {
public void onEnd() {
onExecutionEnd();
}
});
}
private void onExecutionEnd() {
// Do something
}
}
问题是每次我调用executor.execute 时都会创建一个新的侦听器实例,并且所有实例每次都在做同样的事情。在现实世界中,手机游戏中使用了类似的代码,doSomething 方法会为许多SomeClass 实例调用多次,对于这种情况和环境,每次都创建一个new 实例并不是一个好主意。因此,为了避免创建新实例,我将代码更改为此。
class SomeClass {
private Executor executor = new Executor();
private final ExecutionListener executionListener = new ExecutionListener() {
public void onEnd() {
onExecutionEnd();
}
};
void doSomething() {
executor.execute(executionListener);
}
private void onExecutionEnd() {
// Do something
}
}
我发现第一个代码更具可读性,但第二个似乎更优化。我想知道编译器是否会进行这种优化。它可以以某种方式检测到每个侦听器实例都会做同样的事情,而是创建一个新实例,它可以将其存储为类成员。
PS:我知道,让SomeClass 实现侦听器接口并将this 传递给execute 方法是一种选择,但我不希望SomeClass 的消费者可以访问侦听器方法。
【问题讨论】:
-
通常的易读性/性能权衡。不过创建一个新对象并不长。
标签: java compiler-optimization