我有一组自定义类User
的元素。现在我简直无法弄清楚,这个类如何实例化。我甚至通过创建另一个对象并从那里拉出EMPTY集来尝试它:
Site mySite = new Site(/*some params here*/);
User newUser = new User(/*some other params here*/);
Set<User> users = mySite.getUsers();
users.add(newUser);
mySite.setUsers(users);
但由于mySite.users
是null
(非空),我当然会得到一个NullPointerException。
那么,正确的方法是什么?我会非常感激,并希望这不是模糊的!
干杯, Stacky
答案 0 :(得分:7)
它不是空的,是null
。空Set
与Set
的{{1}}变量不同。
检查null
并在必要时创建一个新的空null
:
Set
或者,更好的是,如果需要,让Set<User> users = mySite.getUsers();
if (users == null) {
users = new HashSet<User>();
}
users.add(newUser);
mySite.setUsers(users);
方法返回空mySite.getUsers()
:
Set
然后你不需要public Set<User> getUsers() {
if (users == null) {
users = new HashSet<User>();
}
return users;
}
- 检查。
答案 1 :(得分:5)
对空集的引用与空引用之间存在巨大的差异。 (就像对空字符串的引用和空引用之间存在巨大差异。)
听起来你可能应该改变你的Site
类(或者mySite
的类型),这样getUsers()
在没有时返回空集而不是空引用用户。通常,空集合比空引用更容易使用 - 它可以节省不断执行无效性检查。
答案 2 :(得分:1)
User newUser = new User(/*some params here*/);
Set<User> users = mySite.getUsers();
//the change here
if(users == null) { user = new HashSet<User>();}
users.add(newUser);
mySite.setUsers(users);
顺便说一句,这是一种不好的做法,mySite.getUsers();
会有创建空列表的行为。
答案 3 :(得分:1)
mySite.users不为空,它为空。确保正确初始化。
public class Site {
private Set<User> users = new HashSet<User>();
public Set<User> getUsers() {
return users;
}
...
}