2017-03-25 81 views
-1

我一直無法在默認數組列表中添加新元素..有人幫助我。我尋覓它的最後2天,但我無法理解的邏輯背後將元素添加到默認數組列表

public class User { 

private int id; 
private String name; 

public User(int id, String name) { 
    this.id = id; 
    this.name = name; 
} 

}

public class User2 { 

public static List<User> list = new ArrayList<>(); 

public User2(int i, String abc){ 
    list.add(new User(1,"abc")); 
    list.add(new User(2,"bcd")); 
} 

public List<User> getList() { 
    return list; 
} 

public void setList(List<User> list) { 
    this.list = list; 
} 

public static void main(String[] args) { 
    User2 user2 = new User2(3,"def"); 
    List<User2> usr = new ArrayList<>(); 
    usr.add(user2); 

    list.add((User) usr); 

    for(User temp: list){ 
     System.out.println(" listing "+temp); 
    } 

} 

}

+1

'無法添加新元素' - 請解釋。 –

+1

哪一個是「默認數組列表」? – 4castle

+0

'list.add((User)usr)'將'usr'強制轉換爲'User'。 'usr'是'List '。你能解釋你爲什麼這麼做,你認爲它做了什麼? –

回答

1

list.add((User) usr);將挑起ClassCastException作爲usr不是很名字是List。並且User不能轉換爲List類型。

你需要的是將數組列表中的元素在另外一個什麼:

list.addAll(usr); 

一個更可讀的代碼如下:

User2 user2 = new User2(3,"def"); 
List<User2> listToAdd = new ArrayList<>(); 
listToAdd.add(user2); 
// add the local list elements to the static field list 
list.addAll(listToAdd); 
+1

謝謝..我知道了 – Babu

1

在這一行:

list.add((User) usr); 

你嘗試將List<User2>投射到User。它不會工作。我認爲這個錯誤必須告訴你。

但我可能會看到你想要做什麼。在Java中,您無法將與User沒有任何關聯的User2傳遞給List<User>。您需要定義一個通用接口並使兩個類都實現它。或者讓類User2擴展類User

+0

我是初學者請在代碼中解釋 – Babu

+0

請參閱@davidxxx的文章。此外,我認爲你需要在'public class User2'之後添加'extends User'。這意味着'User2'是'User',而'User2'可以在'User'的任何地方使用。 – Drestin