I have two java class files. Each of them has methods the other one uses.
public class class1{
class2 c2 = new class2();
m1(){
c2.ma();
m2();
}
m2(){}
}
public class class2{
class1 c1 = new class1();
ma(){}
mb(){
c1.m2();
}
}
The lines
class1 c1 = new class1();
and
class2 c2 = new class2();
refer to each other causing an infinite loop, resulting in a java.lang.StackOverflowError error.
Is there some way to have the classes refer to each other or do I have no choice but to transfer all of my methods into a single class?
As is said above, this is a sign of code smell.
Having a setter to set the method afterwards is not satisfactory, as you have an object in an indeterminate state, until the setters are called.
Although using a dependency framework such as Spring can help solve the above problem, if you use constructor injection, then you cannot have cyclic dependencies either! But at least when a bean is injected, you are sure it is not half constructed.
If you don't want to use a dependency injection framework, consider a factory pattern where both objects are created by a factory method, which returns a tuple (or a container object in the case of Java which has no native support for tuples) containing the fully constructed objects.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With