0

以下は、jsp ページの一部の抜粋です。

<%! ArrayList songList = new ArrayList<String>(); %>

    <%
        songList = StoreSongLink.linkList;
        // linkList is a static variable in the class StoreSongLink
        // There the linkList is defined as public static ArrayList<String> linkList = new ArrayList<String>();
    %>

<%}  else {
       for (ArrayList<String> list : songList){}

%>

else srciplet 内のコードはエラーを生成しますrequired java.util.ArrayList<String> found java.lang.Object。どうしてこれなの ?この理由がわかりません。

なぜコンパイラは songList が Object 型であると言うのですか?

4

7 に答える 7

3

最初に明示的に宣言する必要があります。

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

次のように宣言すると:

ArrayList songList = new ArrayList<String>();

次に、 の右側に何があるかに関係なく、 は の でsongListあるArrayListと言っています。割り当てはこれを変更しないため、次のようになります。Object=

ArrayList songList = new ArrayList<String>();
songList = StoreSongLink.linkList;

の型を変更しませんが、songList効果的にはそのままArrayList<Object>です。

宣言を修正すると、forループは次のようになります。

for (String list : songList){}

songListsの配列リストだからですStringObjectあなたが持っているように、Javaはからそれぞれを抽出songListし、 の左側に宣言したものに割り当てようとし:ますArrayList<String>。を に変換できないためObject(ArrayList<String>特にObjectは実際にはString下にあるため)、エラーがスローされます。

于 2012-08-16T13:10:22.607 に答える
2
for (ArrayList<String> list : songList){} // Error is here

そして、Object 型の ArrayList の参照を定義し、String 型の ArrayList インスタンスを宣言しました。これは、ArrayList<String> songList = new ArrayList<String>(); またはArrayList<String> songList = new ArrayList();(Java 7 のみをサポート)

したがって、修正されたコードは次のようになります-

<%! List<String> songList = new ArrayList<String>(); %>
...
for (String list : songList){
}
于 2012-08-16T13:12:12.387 に答える
0

使用する:

for (String s: songList) {
  // etc.
}

またStoreSongLink.linkList、タイプが であることを確認してArrayList<String>ください。

于 2012-08-16T13:09:57.770 に答える
0
for (ArrayList<String> list : songList){}

でなければなりません

for (Object list : songList){}

songList の宣言型は ArrayList(equal ArrayList) なので

于 2012-08-16T13:10:04.777 に答える
0

songList に新しい ArrayList を割り当てている間、songList を arrayList (arrayList) として定義しています。これにより、songList を Objects として反復しても問題ありません。しかし、実際には songList を ArrayList として繰り返し処理しています。

つまり、songList を ArrayList に宣言するように切り替える必要があり、ArrayList ではなく Strings を使用して songList を反復処理する必要があります。

于 2012-08-16T13:10:40.490 に答える
0

ArrayListおそらくご存知のように、パラメーター化されたArrayList<E>宣言を使用しない場合は生の型です。したがって、初期化により、効果的に のObject代わりに の配列リストに変更しました。String
ArrayList songList = new ArrayList<String>();

于 2012-08-16T13:11:24.043 に答える
0

あなたの反復は間違っています

for (ArrayList<String> list : songList){}

songListStringリストではなく要素のリストを含むArrayList<String>

したがって、この方法を繰り返す必要がありますfor (Object song: songList){}

また

ArrayList<String> songList = new ArrayList<String>();
for (String song: songList){}
于 2012-08-16T13:14:39.510 に答える