(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/