gpt4 book ai didi

java - Stackoverflow 对具有相互引用的列表元素的类调用 toString()

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

我有一个包含团队列表的用户类:

class User {
List<Team> teams...

public String toString() {
return "a user and " + teams.toString();
}
}

以及一个包含用户列表的团队类:

class Team {
List<User> users...

public String toString() {
return "a team and " + users.toString();
}
}

我创建一个这样的用户和团队:

User aUser = new User();
List<User> usersList = new ArrayList<User>();
usersList.add(aUser);

Team aTeam = new Team();
List<Team> teamsList = new ArrayList<User>();
teamsList.add(aTeam);

aUser.setTeams(teamsList);
aTeam.setUsers(userList);

但是当我调用 user.toString() 时,由于用户和团队之间的循环,我收到了 StackOverflowError。

关于如何绕过这个循环有什么想法吗?

最佳答案

是的,因为调用 ListtoString() 方法将依次调用其元素的 toString() 方法来追加一个元素之一的 toString() 返回值到一个字符串并返回。

对于您的上下文,users.toString() 将导致 user 实例的 toString() 调用 User 类:依次调用 teams.toString() 方法,生成 Team 类的团队实例的 toString()。因此,一个循环正在发生,不断地调用函数。

然而,正如官方documentation建议:

Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

所以你不应该为不同类的对象返回相同的表示:这可能是你想要做的。

关于java - Stackoverflow 对具有相互引用的列表元素的类调用 toString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20078783/

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