我正在处理一些代码,其中一个对象"foo"正在创建另一个对象"bar",并将其传递给它Callable.在此foo之后将返回bar,然后我希望foo变得无法访问(即:可用于垃圾收集).
我最初的想法是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);
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这可能实际上并不按预期工作,因为内部类通常会保持对其封闭对象的引用.我不希望在这里引用封闭类,因为我希望在Callable仍然可以访问时收集封闭对象.
另一方面,检测到实际上从未引用封闭实例应该是非常简单的,因此Java编译器可能足够聪明,在这种情况下不包括引用.
那么......一个匿名内部类的实例是否会持有对其封闭实例的引用,即使它实际上从未使用封闭的实例引用?
美化标记化而C#时,所以他们是有色同样给出了类型和方法相同的类.这是因为方法在c#中是pascal case而不是java中的camel case.这会影响我的博客和所有stackoverflow c#代码,因为它们也使用了美化.
有人有解决方法吗?
如果没有,你至少可以对2009年3月报道的官方错误进行星级/投票,以便作者再看看.