0

私は過去にベクターを使用しており、それらに非常に精通しています。ArrayList の方が高速で柔軟性があると聞いたことがあります。私はArrayListsJava Genericsを初めて使用します。私は現在、次のようにそれらを使用しており、パラメーター化に関する警告を受け取っています (これは、<String>.

ArrayList<String> arrayList = new ArrayList <String> ();
...
//then within a method
arrayList.add(file.getName()); //<-This line triggers the warning.

以下に示すように、メソッドの警告を抑制することでこれを回避できることをオンラインで発見しました。ただし、これは回避策であり、配列リストを誤って使用することによる警告を抑制するのではなく、配列リストがどのように機能し、適切に使用するかを学びたいと考えています。

@SuppressWarnings("unchecked")

また、ArrayLists の使用に関する何らかの規則や標準がある場合は、それらについても学びたいと思います。

編集: 私が受け取っている警告は次のとおりです:型の安全性: メソッド add(Object) は生の型 ArrayList に属します。ジェネリック型 ArrayList への参照はパラメーター化する必要があります

4

4 に答える 4

5

まず、インターフェイス名でリストを(変数、戻り値の型、またはパラメーターの型として)参照します。

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

コードを特定の実装に結びつけるのは悪い形です。

ベクトルには本質的に問題はありません。それらは基本的に、すべてのメソッドが同期されている ArrayList です。これにより、不要なオーバーヘッドが発生する可能性がありますが、過度ではありません。

チェックされていない警告の抑制に関しては、一般的な引数のないリストを参照している場合にのみ必要です。例えば:

List list = new ArrayList<String>();
list.add("boo");

したがって、リストを戻り値の型、変数の型、またはパラメーターの型として使用するときは常に、適切なジェネリック型を含めてください。

一部のライブラリではそのオプションが提供されない場合がありますが、チェックされていない警告を抑制する必要があるのはそれらの場合だけです。

于 2009-12-24T05:54:11.407 に答える
3

おそらくarrayList、メソッド シグネチャがvoid method(ArrayList arrayList)以上のメソッドに を渡しているのにvoid method(List arrayList)、コンパイラがチェックされていない警告をトリガーしている可能性があります。メソッドのシグネチャをvoid method(ArrayList<String> arrayList)以上に変更する必要がありますvoid method(List<String> list)

于 2009-12-24T06:08:51.600 に答える
1

警告は何ですか?私には問題ないように思えますが、実際にはそのインターフェイスである List にコーディングする必要があります。

于 2009-12-24T05:55:49.420 に答える
0

あなたは警告が以下の行から来ていると述べています:

arrayList.add(file.getName());

file.getName() が「文字列」以外の値を返す場合、コンパイル エラーが発生し、「file.getName()」が「文字列」を返す場合、警告は表示されません。

于 2009-12-24T06:09:41.037 に答える