我在创建TreeMap时得到了一个NullPointerException。
下面是我的代码:
public TreeMap<AccountGroupBean,List<AccountBean>> getAccountsAndGroups() throws SessionExpiredException {
TreeMap<AccountGroupBean,List<AccountBean>> map = new TreeMap<AccountGroupBean,List<AccountBean>>();
List<AccountGroupBean> groups = getAccountGroups();
for(AccountGroupBean group : groups) {
List<AccountBean> accounts = getAccountsByGroupId(group.getId());
System.out.println("PRINT"+ accounts.size());
map.put(group,accounts);
System.out.println("!" +map.get(group).size());
}
return map;
}第一个println打印44。这就是说它不为空。但是,第二个println会引发null异常。
你知道我做错了什么吗?
解决方案
正如接受的解决方案中所指出的那样。问题出在我的compareTo实现中。
我曾经有过:
public int compareTo(AccountGroupBean o) {
return (number > o.getNumber()) ? 1 : -1;
}添加0返回值解决了这个问题:
public int compareTo(AccountGroupBean o) {
if(number == o.getNumber()) {
return 0;
}
return (number > o.getNumber()) ? 1 : -1;
}发布于 2010-11-08 19:57:15
我看起来AccountGroupBean没有以正确的方式实现Comparable,尝试打印group.compareTo(group)以检查它是否打印0。
发布于 2010-11-08 19:49:46
这很可能是AccountGroupBean类如何实现equals和hashcode的问题。有一些实现equals和hashcode的规则,你应该确保你的代码符合这些规则。equals方法的一些规则包括。
对于任何非NULL值,
x.equals(z)必须返回true当且仅当对于非NULL值,x.equals(y)为true如果x.equals(y)为true且y.equals(z)为true,则x.equals(z)也必须为truehttps://stackoverflow.com/questions/4123426
复制相似问题