2013-11-23 106 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,他們似乎互相覆蓋。我不想創建一個新的User1,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