java - 如何解决内部类的循环依赖?

标签 java circular-dependency anonymous-inner-class

(Java问题)

如果我引用内部类中的字段,这是否会导致封闭类和内部类之间的循环依赖?

如何避免这种情况?

这是一个例子:

public class Outer {

  private Other o;
  private Inner i;    

  public Outer() {
    o = new Other();

    i = new Inner() {
      public void doSomething() {
        o.foo();
      }
    };

  }
}

最佳答案

静态与实例类:如果将内部类声明为静态,则内部类的实例不会对外部类有任何引用。如果它不是 satic,那么您的内部对象实际上指向创建它的外部对象(它有一个隐式引用,事实上,如果您在其构造函数上使用反射,您将看到一个用于接收外部实例的额外参数)。 p>

内部实例指向外部实例:循环引用是指每个实例都指向另一个实例的情况。很多时候,您使用内部类来优雅地实现某些接口(interface)并访问私有(private)字段,而不用外部类来实现接口(interface)。它确实意味着内部实例指向外部实例,但并不意味着相反。不需要循环引用。

关闭循环:无论如何,Java 中的循环引用没有任何问题。对象工作得很好,当它们没有被更多引用时,它们就会被垃圾收集。他们是否互相指向并不重要。

关于java - 如何解决内部类的循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/118272/

相关文章:

java - 配置 dap-mode 调试远程服务器

java - 为什么 NumberFormat 返回空白字段?

java - 是否可以在 displayMsg() 函数中访问 getVal() 函数?

Java 泛型 : Infering the type from another method?

java - 无法保留验证结果以在 View 中显示

python 导入循环依赖(也许还有函数声明)

c# - PartialView Action 正在调用自身

c# - 多接口(interface)装饰器——Autofac 中的循环依赖之谜

java - 允许从 OnClickListener 非最终变量修改对象

java - org.jdom2.IllegalAddException : The Content already has an existing parent