任何属性toString()方法都会在JavaFX上提供StackOverflowerError
为什么这会给StackOverflower错误?请检查示例代码任何属性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
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()+”};}