我试图使两个类与每个类具有另一个类的实例化,但具有java.lang.StackOverFlowError
。头等舱如下
public class ReverseGPA {
GPpredictor gp_predictor = new GPpredictor(); //This is the line that causes error
double CURRENT_CREDITS;
double FUTURE_CREDITS;
double CUM_GPA;
double DESIRED_GPA;
double NEW_GRADE_POINT;
int ROUNDED_GRADE_POINT;
double NEW_GPS;
}
而另一类看起来像这样
public class GPpredictor {
ReverseGPA rev_gpa = new ReverseGPA(); //This is the line that causes error
ArrayList<String> arrayCourseName = new ArrayList<>();
ArrayList<Integer> arrayCourseCredit = new ArrayList<>();
ArrayList<String> arrayCourseGrade = new ArrayList<>();
int COURSES;
int CREDIT;
String COURSENAME;
//For predicting purposes
int GRADE;
}
之所以这样,是因为我需要使用要在GPpredictor类中使用的ReverseGPA类中的方法(我需要使用getter方法来使用成绩点)
非常感谢您的任何评论和帮助
最佳答案
在类之间相互创建实例时,您将进行无限递归,因此ReverseGPA创建了GPpredictor实例,该实例创建了ReverseGPA,后者创建了GPpredictor,后者创建了ReverseGPA,后者创建了GPpredictor,后者创建了ReverseGPA,后者创建了GPpredictor。 ...
因此,具体而言,您具有:
public class A {
B b = new B();
}
和
public class B {
A a = new A();
}
停止疯狂-通过构造函数参数或setter方法将实例传递给这些类中的至少一个。我不确定您的类(class)在做什么,所以我不能说哪个(或如果两个都)应该这样做。
再次,以一种具体的方式,至少要做一件事
public class A {
B b;
public void setB(B b) {
this.b = b;
}
}
和
public class B {
A a;
public B(A a) {
this.a = a;
}
}
而在主要方法
public static void main(String[] args) {
A a = new A();
B b = new B(a); // pass a into B
a.setB(b); // pass b into A
}