时间:2015-11-01 00:53:53

标签: java

我正在尝试创建两个类,每个类都有另一个类的实例化,但是有一个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方法)

非常感谢任何评论和帮助

1 个答案:

答案 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
}