Java 如何将元素添加到空集合<;类别>;?

Java 如何将元素添加到空集合<;类别>;?,java,model-view-controller,null,nullpointerexception,set,Java,Model View Controller,Null,Nullpointerexception,Set,我有一组自定义类User的元素。现在我无法理解这个类是如何被实例化的。我甚至尝试过创建另一个对象,然后从中提取空集,如下所示: 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);

我有一组自定义类
User
的元素。现在我无法理解这个类是如何被实例化的。我甚至尝试过创建另一个对象,然后从中提取空集,如下所示:

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);
Site mySite=新站点(/*此处有一些参数*/);
User newUser=新用户(/*此处有一些其他参数*/);
Set users=mySite.getUsers();
users.add(newUser);
mySite.setUsers(用户);
但是由于
mySite.users
null
(不是空的),我当然会得到一个NullPointerException

那么,正确的方法是什么?我将非常感激,希望这不是含糊不清的

干杯, Stacky

User newUser=新用户(/*此处有一些参数*/);
Set users=mySite.getUsers();
//这里的零钱
如果(users==null){user=new HashSet();}
users.add(newUser);
mySite.setUsers(用户);
顺便说一句,这是一种糟糕的做法,
mySite.getUsers()
将具有创建空列表的行为。

User newUser=newUser(/*此处的一些参数*/);
Set users=mySite.getUsers();
//这里的零钱
如果(users==null){user=new HashSet();}
users.add(newUser);
mySite.setUsers(用户);
顺便说一句,这是一种糟糕的做法,
mySite.getUsers()将具有创建空列表的行为。

对空集合的引用与空引用之间存在巨大差异。(就像对空字符串的引用和空引用之间存在巨大差异一样。)

听起来您可能应该更改
站点
类(或
mySite
的任何类型),以便在没有用户时
getUsers()
返回一个空集而不是空引用。总的来说,空集合比空引用更容易使用-它省去了经常执行空性检查的麻烦。

对空集合的引用和空引用之间有很大的区别。(就像对空字符串的引用和空引用之间存在巨大差异一样。)


听起来您可能应该更改
站点
类(或
mySite
的任何类型),以便在没有用户时
getUsers()
返回一个空集而不是空引用。一般来说,空集合比空引用更容易使用-这样可以避免经常执行空性检查。

mySite.users不是空的,它是空的。确保正确初始化它

public class Site {

   private Set<User> users = new HashSet<User>();

   public Set<User> getUsers() {
     return users;
   }

   ...

}
公共类站点{
private Set users=new HashSet();
公共集getUsers(){
返回用户;
}
...
}

mySite.users不是空的,它是空的。确保正确初始化它

public class Site {

   private Set<User> users = new HashSet<User>();

   public Set<User> getUsers() {
     return users;
   }

   ...

}
公共类站点{
private Set users=new HashSet();
公共集getUsers(){
返回用户;
}
...
}

它不是空的,它是
null
。空的
集合
集合
变量不同,后者是
空的

检查
null
并在必要时创建一个新的空
Set

Set<User> users = mySite.getUsers();
if (users == null) {
    users = new HashSet<User>();
}
users.add(newUser);
mySite.setUsers(users);
public Set<User> getUsers() {
    if (users == null) {
        users = new HashSet<User>();
    }
    return users;
}

这样您就不需要检查
null

它不是空的,而是
null
。空的
集合
集合
变量不同,后者是
空的

检查
null
并在必要时创建一个新的空
Set

Set<User> users = mySite.getUsers();
if (users == null) {
    users = new HashSet<User>();
}
users.add(newUser);
mySite.setUsers(users);
public Set<User> getUsers() {
    if (users == null) {
        users = new HashSet<User>();
    }
    return users;
}

那么您就不需要检查
null

它是空的还是
null
?这是两个完全不同的状态确保
mySite.getUsers()
从不返回
null
value.change getUsers()方法,因此它返回一个空集。我希望它是空的,但是它是
null
,原因是
站点
用户
作为一个属性相互依赖。因此,为了创建一个
null
属性,它是空的还是
null
?这是两个完全不同的状态确保
mySite.getUsers()
从不返回
null
value.change getUsers()方法,因此它返回一个空集。我希望它是空的,但是它是
null
,原因是
站点
用户
作为一个属性相互依赖。因此,为了创建一个
null
属性。哎哟。被乔恩·斯基特打败:)哎哟。被乔恩·斯基特击败:)有一些机器人正在检查你的答案,是不是这里有一些机器人正在检查你的答案,不是吗这就是我要找的
HashSet
是关键字。我想知道,为什么我不能简单地拿一套新的。感谢您并为我缺乏基本的Java知识感到抱歉。
Set
是一个接口,您不能创建接口的实例。必须使用实现接口的具体类
HashSet
是最常用的方法之一,但也有其他方法,例如
TreeSet
。看看JavaDoc,这就是我要找的
HashSet
是关键字。我想知道,为什么我不能简单地拿一套新的。感谢您并为我缺乏基本的Java知识感到抱歉。
Set
是一个接口,您不能创建接口的实例。必须使用实现接口的具体类
HashSet
是最常用的方法之一,但也有其他方法,例如
TreeSet
。请参阅JavaDoc。