我试图使两个类与每个类具有另一个类的实例化,但具有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
}

10-01 17:30