我有两个java类文件.他们每个人都有另一个使用的方法.
public class class1{
class2 c2 = new class2();
m1(){
c2.ma();
m2();
}
m2(){}
}
public class class2{
class1 c1 = new class1();
ma(){}
mb(){
c1.m2();
}
}
Run Code Online (Sandbox Code Playgroud)
线条
class1 c1 = new class1();
Run Code Online (Sandbox Code Playgroud)
和
class2 c2 = new class2();
Run Code Online (Sandbox Code Playgroud)
彼此引用导致无限循环,导致java.lang.StackOverflowError错误.
有没有办法让这些类相互引用,或者我别无选择,只能将我的所有方法转移到一个类中?
小智 6
如上所述,这是代码气味的标志.
之后有一个setter来设置方法并不令人满意,因为你有一个处于不确定状态的对象,直到调用setter.
尽管使用Spring之类的依赖框架可以帮助解决上述问题,但如果使用构造函数注入,那么您也不能拥有循环依赖关系!但至少在注入豆子时,你确定它不是一半构造的.
如果您不想使用依赖项注入框架,请考虑一个工厂模式,其中两个对象都是由工厂方法创建的,该方法返回一个元组(或者在Java的情况下对于元组没有本机支持的容器对象)完全构造的对象.
有没有某种方法可以让类相互引用,或者我别无选择,只能将所有方法转移到一个类中?
在我看来,循环引用是一种代码味道。请参阅此答案以获取解释。请特别注意关于 的一点cognitive load。
解决方案是让一个类依赖于另一个类,并将调用委托给另一个类:
public class class1{
class2 c2 = new class2();
m1(){
c2.ma();
m2();
}
m2(){}
}
public class class2{
ma(){}
}
Run Code Online (Sandbox Code Playgroud)
这样,您并没有真正将所有方法转移到一个类中,而只是将其组合class2到class1. 其他类依赖class1并且class2只需要依赖class1。
| 归档时间: |
|
| 查看次数: |
3211 次 |
| 最近记录: |