2012-04-12 11 views
5

Javaのc#.net genericリストはどのようになりますか?そのようなC#.NETの一般的なリストと同様のもの

気にいら:

public class ClientList : List<Client> { } 

Nikilからの答えは完璧だった、私はちょうど一覧からクラスを作成したい誰に追加する:

public class ClientList extends ArrayList<Client> 

答えて

13

Javaの一覧interface(java.util.List)を生成できます。言い換えれば、Listのインスタンスに型を与えることができるため、その型のインスタンスだけをそのListに挿入して読み込むことができます。ここに例があります:

List<String> list = new ArrayList<String>(); 

このリストはStringインスタンスのみを対象としており、Stringインスタンスのみがこのリストに入れられます。このリストに他のものを入れようとすると、コンパイラは不平を言うでしょう。

汎用チェックはコンパイル時にのみ存在します。実行時に、String ListにStringが挿入された他のオブジェクトがあるようにコードを微調整することが可能です。しかし、これは悪い考えです。

ジェネリックリスト

へのアクセスあなたが取得し、このような一般的なリストの要素を挿入することができます。リストから取得したオブジェクトをキャストする必要はありませんどのように

List<String> list = new ArrayList<String>(); 

String string1 = "a string"; 
list.add(string1); 

String string2 = list.get(0); 

注意してください。 get()メソッド呼び出し。通常は必要です。コンパイラーは、このListにStringインスタンスのみが含まれていることが分かるので、キャストは必要ありません。

反復処理ジェネリックリスト

あなたはこのように、イテレータを使用して、一般的なリストを反復処理することができます:オブジェクトをキャストする必要はありませんどのように

List<String> list = new ArrayList<String>(); 

Iterator<String> iterator = list.iterator(); 

while(iterator.hasNext()){ 
    String aString = iterator.next(); 
} 

お知らせiterator.nextから返さ()次の呼び出し。リストが生成される(型を持つ)ため、コンパイラーにはStringインスタンスが含まれていることが分かります。したがって、それがイテレータから来ても、それから得られたオブジェクトをキャストする必要はありません。

また、このように、forループの新しいを使用することができます:文字列変数はforループの括弧内で宣言されているか

List<String> list = new ArrayList<String>(); 

for(String aString : list) { 
    System.out.println(aString); 
} 

は注意してください。各反復(List内の各要素)に対して、この変数には現在の要素(現在のString)が含まれます。

関連する問題