小编Mik*_*nty的帖子

匿名类*总是*保持对其封闭实例的引用吗?

我正在处理一些代码,其中一个对象"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编译器可能足够聪明,在这种情况下不包括引用.

那么......一个匿名内部类的实例是否会持有对其封闭实例的引用,即使它实际上从未使用封闭的实例引用?

java garbage-collection anonymous-class

28
推荐指数
2
解决办法
7617
查看次数

修复了google-code-prettify w/c#

美化标记化而C#时,所以他们是有色同样给出了类型和方法相同的类.这是因为方法在c#中是pascal case而不是java中的camel case.这会影响我的博客和所有stackoverflow c#代码,因为它们也使用了美化.

有人有解决方法吗?

如果没有,你至少可以对2009年3月报道的官方错误进行星级/投票,以便作者再看看.

javascript c#

16
推荐指数
2
解决办法
2846
查看次数