gpt4 book ai didi

java - 构造函数方法尝试从子类初始化insatnce变量得到StackOverflowError

转载 作者:行者123 更新时间:2023-12-01 18:25:26 25 4
gpt4 key购买 nike

我需要在 Person 中填写用户,因为在数据库中是强制的,但 User 是 Person 的子级,我得到 java.lang.StackOverflowError

用户是一个人人有一个用户

我知道这是一个递归问题,但我保存了 User in Person 以了解谁创建了该人。

我认为这是一个设计问题,但是如何解决这个问题?我想为此保存一个默认值,因为数据库需要该字段。

类(class)人物

public class Person {
private long idPerson;
//mandatory field in database
private User useredt;
public Person() {
useredt = new User("test");
}
...
}

类用户

public class User extends Person {
private String username;
private String password;
private Boolean enabled = false;

public User() {
}
...
}

失败跟踪

java.lang.StackOverflowError
at sun.util.calendar.ZoneInfo.getOffsets(Unknown Source)
at sun.util.calendar.ZoneInfo.getOffsets(Unknown Source)
at java.util.GregorianCalendar.computeFields(Unknown Source)
at java.util.GregorianCalendar.computeFields(Unknown Source)
at java.util.Calendar.setTimeInMillis(Unknown Source)
at java.util.GregorianCalendar.<init>(Unknown Source)
at java.util.Calendar.createCalendar(Unknown Source)
at java.util.Calendar.getInstance(Unknown Source)
at com.javalabs.web.dao.Person.<init>(Person.java:56)
at com.javalabs.web.dao.User.<init>(User.java:72)
at com.javalabs.web.dao.Person.<init>(Person.java:60)
at com.javalabs.web.dao.User.<init>(User.java:72)

最佳答案

你有无限递归

new User() 隐式调用 Person() (父类(super class)构造函数),其中您再次调用了 new User()它再次调用 Person() 等等。

PS:从设计的角度来看,如果用户是一个(继承)人,那么我认为使用一个人有一个是不明智的(组成)用户。

关于java - 构造函数方法尝试从子类初始化insatnce变量得到StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26381424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com