6

私はJavaが初めてで、プログラマーが使用できるさまざまなコレクションを学ぼうとしています. 「java.util」を Eclipse のスクラップブックにインポートし、次のコードを調べました。

ArrayList<String> list = new ArrayList<String>();
list.add("test1");
list.add("test2");

この出力を受け取ります。

The type ArrayList is not generic; it cannot be parameterized with arguments <String>
Syntax error, parameterized types are only available if source level is 5.0
The type ArrayList is not generic; it cannot be parameterized with arguments <String>
Syntax error, parameterized types are only available if source level is 5.0

このエラーはどういう意味ですか? 一般的な配列リストは作成しませんでした。文字列の配列リストを作成しました。また、「ソースレベル」とは?

4

3 に答える 3

10

Eclipse の Java バージョンは 1.4 に設定されています。Java のジェネリックは Java 5 でのみ導入されました。

この問題を解決するには、Eclipse で JDK を 1.5 以降に変更します。

あなたのJDKを確認することができますProject - > Java Build Path - > Libraries

ここで Java 1.5 以降であることがわかった場合は、コンパイラの Compliance が 5 以上に設定されていることを確認してください。

あなたはそれを確認することができますProject - > Java Compiler

編集:

新しい jdk を Eclipse に追加するには

プロジェクトを右クリック- > Java Build Path - > Libraries - > Add Libraries - > JRE System Library - > Installed Libraries - > Add - > Standard VM - > インストール場所を指定し、OKを押します

インストールされた JRE のリストで、Java 7 を確認してください。

于 2012-05-11T19:00:37.050 に答える
4

私の頭に浮かぶのは:

  • JDK がジェネリックに完全に準拠しているかどうかを確認ArrayListします (そのため、JSE のクラスは実際にはジェネリック クラスになります)。
  • ArrayListスコープの優先順位があり、標準ライブラリ定義をオーバーライドする別のものがないかどうかを確認します
于 2012-05-11T19:00:13.360 に答える
1

はい、問題は 1.5 以降では解消されます。質問が完全に解決されていないように感じますが、誰かがこの質問に出くわした場合に備えて、2 セントを追加します。それは主に質問のこの部分についてです:

一般的な配列リストは作成しませんでした。文字列の配列リストを作成しました。

言及されたエラーメッセージ:

> ArrayList 型はジェネリックではありません。引数 <String>でパラメーター化することはできません

> 構文エラー、パラメータ化された型はソース レベルが 5.0 の場合にのみ使用可能

これが実際に意味することは、Java 1.5 以降、型パラメーターも使用できるようになったことです (値パラメーターの使用に慣れていた場合)。JDK 1.5 ではジェネリックが導入され、型 (またはパラメーター化された型)を抽象化できます。

クラス設計者は、定義内の型について一般的である可能性があります。arrayList の実装は次のようになります。

public class ArrayList<E> implements List<E> .... {
    // Constructor
    public ArrayList() {...}

    // Public methods
    public boolean add(E e) {...}
    public void add(int index, E element) {...}
    public boolean addAll(int index, Collection<? extends E> c) {...}
    public abstract E get(int index) {...}
    public E remove(int index) {...}
    ...
}

ここで、EはString や Integer などの任意の型にすることができます。したがって、総称的なarrayList という名前が付けられました。

以下のように、この例で行われたオブジェクトのインスタンス化またはメソッドの呼び出し中に、ユーザーのタイプを特定できます。

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

(私が間違っていなければ、これは上記の場合の混乱でした:-))

ジェネリックの使用例 (必要な場合):

// Declaring a DAO layer
public interface IMasterAbstractDao<E, I> {
    public E findById(I id) {...}
    public void delete(E e) {...}
    public List<E> findByCriteria(Criterion criterion) {...}
}

ここで、 Eは返されるエンティティ タイプです。これは、システムで定義されたすべてのモデルBeanに使用でき、汎用になります。

お役に立てれば。

リファレンス: Java プログラミング チュートリアル - ジェネリック

于 2016-04-29T18:57:57.283 に答える