我正在尝试创建两个类,每个类都有另一个类的实例化,但是有一个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;
}
我之所以这样,是因为我需要使用ReverseGPA类中的方法在GPpredictor类中使用(我需要使用等级点,使用getter方法)
非常感谢任何评论和帮助
答案 0 :(得分:7)
你有无限的递归,因为类本身会创建彼此的实例,因此ReverseGPA会创建一个GPpredictor实例来创建一个ReverseGPA,它创建一个GPpredictor来创建一个ReverseGPA,它创建一个GPpredictor,创建一个创建ReverseGPA的ReverseGPA GPPredictor ....
所以具体来说,你有:
public class A {
B b = new B();
}
和
public class B {
A a = new A();
}
停止疯狂 - 通过构造函数参数或setter方法将实例传递给这些类中的至少一个。我不确定你的课程是做什么的,所以我不能说哪个(或两者都是)应该这样做。
再次,以具体的方式,至少有一个做
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
}