java – 重写toString()方法的StackOverflow错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 重写toString()方法的StackOverflow错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2338字,纯文字阅读大概需要4分钟。
内容图文
![java – 重写toString()方法的StackOverflow错误](/upload/InfoBanner/zyjiaocheng/753/f7b252c62c4547529953d11de9c00b54.jpg)
我有两个班级User&角色.他们有很多关系.
在User类中,我重写了toString方法
@Override
public String toString() {
return "User [userId=" + this.userId + ", profileName=" + this.profileName
+ ", firstName=" + this.firstName + ", lastName=" + this.lastName
+ ", email=" + this.email + ", socialEmail=" + this.socialEmail
+ ", accountEnabled=" + this.accountEnabled + ", accountNonExpired="
+ this.accountNonExpired + ", accountNonLocked=" + this.accountNonLocked
+ ", country=" + this.country + ", role=" + this.role + "]";
}
在Role类中相同
@Override
public String toString() {
return "Role [roleId=" + roleId + ", users=" + users + ", role=" + role
+ "]";
}
我通过hibernate从db获取用户详细信息
@SuppressWarnings("unchecked")
public User getUser(String name){
List<User> userList = new ArrayList<User>();
Query query = sessionFactory.getCurrentSession().createQuery("from User u where u.profileName = :name or u.socialEmail = :name");
query.setParameter("name", name);
userList = query.list();
if (userList.size() > 0)
return userList.get(0);
else
return null;
}
当流程在hibernate方法中到达下面的行时
userList = query.list();
它抛出一个堆栈溢出异常,显示toString是原因
谁能帮我这个
java.lang.StackOverflowError
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:113)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415)
at java.lang.StringBuilder.append(StringBuilder.java:132)
at java.lang.StringBuilder.<init>(StringBuilder.java:110)
at com.myapp.model.User.toString(User.java:189)
at java.lang.String.valueOf(String.java:2902)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at java.util.AbstractCollection.toString(AbstractCollection.java:450)
at org.hibernate.collection.PersistentSet.toString(PersistentSet.java:310)
at java.lang.String.valueOf(String.java:2902)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at com.myapp.model.Role.toString(Role.java:67)
下面一行的位置是User类中toString方法的开头
at com.myapp.model.User.toString(User.java:189)
解决方法:
在用户的toString()中引用角色,在角色的toString()中引用用户.现在,如果每个角色都有一个用户列表,并且每个用户实例都有一个返回父角色的引用,那么您就有了循环引用.基本上,您的对象图如下所示:
所以会发生的是在角色上调用toString(),然后尝试在所有用户上调用toString().但它将从user-1开始,它有一个返回角色的引用,并且该过程重新开始.你基本上有一个无限递归的情况.
内容总结
以上是互联网集市为您收集整理的java – 重写toString()方法的StackOverflow错误全部内容,希望文章能够帮你解决java – 重写toString()方法的StackOverflow错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。