12

Javaでのac#.netジェネリックリストはどうでしょうか?

そのような何か:

public class ClientList : List<Client> { }

Nikilからの答えは完璧でした。リストからクラスを作成したい人には、次のように追加したいと思います。

public class ClientList extends ArrayList<Client>
4

1 に答える 1

22

Javaのリストインターフェイス(java.util.List)を生成できます。つまり、Listのインスタンスにタイプを指定できるため、そのタイプのインスタンスのみを挿入して、そのリストから読み取ることができます。次に例を示します。

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

このリストは現在、Stringインスタンスのみを対象としています。つまり、Stringインスタンスのみをこのリストに入れることができます。このリストに何か他のものを入れようとすると、コンパイラは文句を言います。

ジェネリック型チェックはコンパイル時にのみ存在します。実行時に、文字列リストに文字列が挿入された他のオブジェクトが含まれるようにコードを微調整することができます。ただし、これは悪い考えです。

一般的なリストへのアクセス

次のように、一般的なリストの要素を取得して挿入できます。

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

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

String string2 = list.get(0);

通常必要なように、List.get()メソッド呼び出しから取得したオブジェクトをキャストする必要がないことに注意してください。コンパイラは、このリストに文字列インスタンスのみを含めることができることを認識しているため、キャストは必要ありません。

汎用リストの反復

次のように、イテレータを使用してジェネリックリストを反復できます。

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

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

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

iterator.next()の次の呼び出しから返されたオブジェクトをキャストする必要がないことに注意してください。リストは生成されている(型を持っている)ため、コンパイラはリストに文字列インスタンスが含まれていることを認識します。したがって、イテレータから取得したオブジェクトであっても、そこから取得したオブジェクトをキャストする必要はありません。

次のように、新しいforループを使用することもできます。

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

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

文字列変数がforループの括弧内でどのように宣言されているかに注目してください。反復ごと(リスト内の各要素)、この変数には現在の要素(現在の文字列)が含まれます。

于 2012-04-12T00:18:03.760 に答える