相关疑难解决方法(0)

所有最终变量都是由匿名类捕获的吗?

我以为我知道答案,但是在一小时左右的搜索后我找不到任何确认.

在这段代码中:

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());
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

假设registerCallback将其参数保存在某处,以便匿名子类的对象将存活一段时间.显然,这个对象必须保持一个引用,obj1以便onEvent在调用时可以工作.

但是鉴于该对象没有使用obj2,它是否仍然保持引用obj2,以便obj2在对象存在时不能进行垃圾收集?我的印象是所有可见final(或有效的最终)局部变量和参数都被捕获,因此只要对象存活就无法进行GC,但我找不到任何说明这种或那种方式的东西.

它是依赖于实现的吗?

JLS中有一节可以解答这个问题吗?我无法在那里找到答案.

java anonymous-class

17
推荐指数
2
解决办法
1050
查看次数

标签 统计

anonymous-class ×1

java ×1