堆垛。我一直在网站上搜索我的问题,但没找到我要找的东西。我坚持使用这段代码:
public class Users{
ArrayList<ValidateUser> personer = new ArrayList<ValidateUser>();
ValidateUser newUser = new ValidateUser();
newUser.setUser("administrator");
newUser.setPass("asdf123");
newUser.setBalance(0.8);
newUser.setType("admin");
personer.add(newUser);
有一个很好的数组列表,但如果我向ArrayList添加更多“newUsers”,它们似乎互相覆盖。我不想创建newUser1,newUser2对象,因为在我的程序中,我必须能够直接从程序中添加新用户。
如何实现这一目标?
的ValidateUser:
public class ValidateUser {
private String username;
private String password;
private double balance;
private String role;
public void setUser(String user) {
username = user;
}
public void setPass(String pass) {
password = pass;
}
public void setBalance(double rating) {
balance = rating;
}
public void setType(String type) {
role = type;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public double getBalance() {
return balance;
}
public String getRole() {
return role;
}
}
答案 0 :(得分:11)
如果我理解你正确地以这种方式添加新用户:
ValidateUser newUser = new ValidateUser();
newUser.setUser("administrator");
newUser.setPass("asdf123");
newUser.setBalance(0.8);
newUser.setType("admin");
personer.add(newUser);
newUser.setUser("different admin");
personer.add(newUser);
但是这样对象指向相同的引用,因此您必须执行以下操作来实例化新对象:
newUser = new ValidateUser();
newUser.setUser("foo");
personer.add(newUser);
答案 1 :(得分:3)
只要你new ValidateUser()
你应该没事。换句话说,如果您实例化ValidateUser类型的新对象,并将其添加到ArrayList。
你没有清楚地解释你到底做了什么,但我的第一个猜测是你再次使用相同的参考...:)
如何制作10个新的ValidateUser对象的示例:
// Let's make 10 objects of ValidateUser type
ValidateUser tmpVuser = null;
for (int i = 0; i < 10; i++) {
tmpVuser = new ValidateUser(); // notice: we always create a new instance
tmpVuser.setUser("user" + i);
tmpVuser.setPass("changeme" + i);
tmpVuser.setBalance(0.8);
tmpVuser.setType("admin");
personer.add(tmpVuser);
}
然而,值得注意的是,如果ValidateUser是一个不可变类型(更多关于它:http://www.javapractices.com/topic/TopicAction.do?Id=29),你的代码可能会正常工作。