2013-11-23 2 views
3

Штабелеры. Я искал сайт для моего вопроса, но не нашел того, что искал. Я застрял с этим кодом:Избегать перезаписывания объектов в ArrayList

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); 

Получил хороший массив-список происходит, но если я добавить больше «newUsers» к ArrayList, они, кажется, заменяют друг друга. Я не хочу создавать объект 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; 
} 

}

ответ

8

Если я понял правильно, вы будете добавление новых пользователей так:

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); 
+0

Не могу поверить, что все было так просто. Спасибо, все работает сейчас! :) –

+0

@JesperBaungardBruunHansen да, вы можете представить, что это был тот же человек, но вы только что изменили его имя, а затем обновили его. –

4

Пока вы 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), ваш код, вероятно, будет работать нормально.

+0

большое описание! Благодаря! :) –

+0

Очень приятно, сегодня у меня была такая же проблема, и этот ответ решил. – coyote

Смежные вопросы