2017-03-25 3 views
-1

デフォルトの配列リストに新しい要素を追加できませんでした。とてもではないことusrとしてClassCastExceptionを引き起こすだろう、私は最後の2日間、それについて検索しましたが、私はその背後にデフォルトのarraylistに要素を追加する

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);をロジックを理解することができませんでしたよく名前はListです。 Userは、Listタイプにキャストすることはできません。

あなたは別のもので配列リストの要素を追加して必要なもの:

list.addAll(usr); 

Aより読みやすいコードは次のようになります。

list.add((User) 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

UserList<User2>をキャストしようとします。それは動作しません。私はエラーがあなたに言わなければならないと思う。

しかし、私はあなたがしたいことを見ることができるかもしれません。 JavaではUserとのリンクを持たないUser2List<User>に渡すことはできません。共通のインタフェースを定義して、両方のクラスで実装する必要があります。または、クラスUser2をクラスUserに拡張します。

+0

私は初心者です。 – Babu

+0

@davidxxxの投稿を参照してください。さらに、 'public class User2'の後に' extends User'を追加する必要があると思います。これは 'User2'が' User'を意味し、 'User2'は' User'が期待されるところならどこでも使えるということです。 – Drestin

関連する問題