任何属性toString()方法都会在JavaFX上提供StackOverflowerError

任何属性toString()方法都会在JavaFX上提供StackOverflowerError,java,properties,javafx-8,stack-overflow,tostring,Java,Properties,Javafx 8,Stack Overflow,Tostring,为什么这会给StackOverflower错误?请检查示例代码 public class JavaApplication5 { public static void main(String[] args) { // TODO code application logic here Student st = new Student(); st.setId(1); st.setName("Asus"); st

为什么这会给StackOverflower错误?请检查示例代码

public class JavaApplication5 {

    public static void main(String[] args) {
        // TODO code application logic here

        Student st = new Student();
        st.setId(1);
        st.setName("Asus");
        st.setSurname("Corparation");
        System.out.println(st.toString());

    }

}

public class Student {

    private StringProperty name;
    private StringProperty surname;
    private IntegerProperty id;

    public IntegerProperty idProperty(){
        if(id == null){
            id= new SimpleIntegerProperty(this, "id");
        }
        return id;
    }

    public int getId(){
        return idProperty().get();             
    }

    public void setId(int stdId){
        idProperty().set(stdId);
    }

    public StringProperty nameProperty(){
        if(name == null){
            name = new SimpleStringProperty(this, "name");
        }
        return name;
    }

    public String getName(){
        return nameProperty().get();
    }

    public void setName(String stdName){
        nameProperty().set(stdName);
    }

    public StringProperty surnameProperty(){
        if(name == null){
            name = new SimpleStringProperty(this, "surame");
        }
        return name;
    }

    public String getSurname(){
        return surnameProperty().get();
    }

    public void setSurname(String stdSurname){
        nameProperty().set(stdSurname);
    }

    @Override
    public String toString() {
        return "Student{" + "name=" + name + ", surname=" + surname + ", id=" + id + '}';
    }


}

这是否会导致此问题?当我调试代码时,类IntegerPropertyBase.java总是在appendbean时返回我的toString方法,因此我认为无限递归导致了这个错误

调用属性的
toString
时,它返回一个调试字符串,其中包含有关属性所有者的信息。这反过来调用所有者的
toString
,得到一个无限递归

因此,在所有者的
toString
方法中调用属性的
toString
是没有意义的

您可以通过将
Student.toString
写成

@Override
public String toString() {
    return "Student{" + "name=" + getName() + ", surname=" + getSurname() + ", id=" + getId() + '}';
}

(但您需要实例化姓氏)。

当您调用属性的
toString
时,它会返回一个调试字符串,其中包含有关属性所有者的信息。这反过来调用所有者的
toString
,得到一个无限递归

因此,在所有者的
toString
方法中调用属性的
toString
是没有意义的

您可以通过将
Student.toString
写成

@Override
public String toString() {
    return "Student{" + "name=" + getName() + ", surname=" + getSurname() + ", id=" + getId() + '}';
}

(但您需要实例化姓氏)。

您可以尝试使用
@Override public String toString(){return“Student{”+“name=”+getName()+”,姓氏=“+getName()+”,id=“+getId()+”;}
您可以尝试使用
@Override public String toString(){return Student{”+“name=+getName()+”,姓氏=”+GetName()+”,id=“+getId()+”};}