如何将元素添加到null Set <class>?</class>

时间:2013-11-08 15:20:30

标签: java model-view-controller null nullpointerexception set

我有一组自定义类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.usersnull(非空),我当然会得到一个NullPointerException。

那么,正确的方法是什么?我会非常感激,并希望这不是模糊的!

干杯, Stacky

4 个答案:

答案 0 :(得分:7)

它不是空的,是null。空SetSet的{​​{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;
   }

   ...

}