匿名类是否*始终*维护对其封闭实例的引用?
2022-09-01 10:51:51
我正在处理一些代码,其中一个对象“foo”正在创建另一个对象“bar”,并将其传递给.在此之后,foo将返回bar,然后我希望foo变得无法访问(即:可用于垃圾回收)。Callable
我最初的想法是匿名创建。例如:Callable
class Foo {
...
public Bar createBar() {
final int arg1 = ...
final int arg2 = ...
final int arg3 = ...
return new Callable<Baz>() {
@Override
public Baz call() {
return new Baz(arg1, arg2, arg3);
}
};
}
}
然而,我突然想到,这可能实际上并不像预期的那样工作,因为内部类通常会保留对其封闭对象的引用。我不想在这里引用封闭类,因为我希望在 仍然可访问时收集封闭对象。Callable
另一方面,检测封闭实例从未被实际引用应该是相当微不足道的,所以也许Java编译器足够聪明,在这种情况下不包括引用。
所以。。。匿名内部类的实例是否会保留对其封闭实例的引用,即使它从未实际使用封闭实例引用?