在这段代码中:
public class Outer {
// other code
private void method1() {
final SomeObject obj1 = new SomeObject(...);
final SomeObject obj2 = new SomeObject(...);
someManager.registerCallback(new SomeCallbackClass() {
@Override
public void onEvent() {
System.out.println(obj1.getName());
}
});
}
}
假设registerCallback将其参数保存在某处,以便匿名子类的对象将存活一段时间。 显然,这个对象必须保持对obj1的引用,以便onEvent在调用时可以工作。 但是假设对象不使用obj2,它是否仍然保持对obj2的引用,以便在对象存在时obj2不能被垃圾收集? 我的印象是所有可见的最终(或有效的最终)局部变量和参数都被捕获,因此只要对象存活就无法进行GC,但我找不到任何说明方式或者 其他。 它是依赖于实现的吗? JLS中有一节可以解答这个问题吗? 我无法在那里找到答案。