如何从两个具体类型的类中删除循环依赖

sau*_*anu 2 java circular-dependency

我有两个类,如下所示:

public class A{
private String id ;
private SortedMap<String,B> answer = new TreeMap<String,B>();
private String text;
}

public class B{
private String id = null ;
private SortedMap<String,A> question = new TreeMap<String,A>();
private String text = null;
}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以从上述类中删除循环依赖项?

Far*_*mor 5

不,没有,但这没问题。

在JAVA中具有循环依赖关系没有问题。如果要在两个方向上遍历结构,则具有它们是很常见的。想想一棵父母和孩子相互认识的树,从而形成循环依赖。

垃圾收集器将检测循环依赖项并进行处理。

唯一的问题在两个构造函数中都具有循环依赖关系时发生,这将导致堆栈溢出:)

  • 如果您在逻辑上具有循环依赖关系,那还不错。具有循环依赖关系的设计是不好的,但是根据给定的信息,我们无法确定它是否是不好的设计。 (2认同)
  • 一些聪明的人认为循环依赖不好,主要是因为这使他们的IoC框架难以编写。JVM对它们没有问题,实际上,像Swing这样的东西就充满了它们。例如,如果没有循环依赖关系,JPA将几乎无法使用-会妨碍多对一关系,而完全禁止一对一关系。 (2认同)