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
那么,正确的方法是什么?我将非常感激,希望这不是含糊不清的
干杯,
StackyUser 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。