0

私はHashMap以下のように持っています:

public static HashMap submitService(HashMap inputMap) throws Exception
    {
        //code....

        ArrayList<String> allIdsList = (ArrayList<String>) inputMap.get("Result_List");
        // System.out.println("Result List: " + allIdsList); prints the arraylist (e.g. [2, 21, 6, 3]

        for(int i=0;i<allIdsList.size();i++)
            {
                System.out.println(" values: " + (String)allIdsList.get(i));
            }
    }

これarraylistはコンソールに印刷されています(リストが空でないかどうかを確認するためだけに試しました)。しかし(String)allIdsList.get(i)、 for ループの内側に次のエラーメッセージが表示されます

java.lang.Long cannot be cast to java.lang.String

誰かの助けを本当に感謝します。

4

4 に答える 4

1

HashMap がタイプであることを確認してくださいHashMap<String,ArrayList<String>>

于 2013-06-16T10:54:54.003 に答える
0

これはどこinputMapから来たのですか?見た目では、その値は型ではなく、またはのArrayList<String>ようなものです。問題は、投稿されたスニペットの外のどこかにあるようです。ArrayList<Object>ArrayList<Long>

このメソッドでは生の型を扱っているため、コンパイラは文句を言いません (ただし、生の型の使用について警告する必要があります)。ただし、VM はClassCastExceptionキャストが失敗した場所でスローします。これが表示されていることです。

HashMap<String, ArrayList<String>>としてのみ受け入れることで、署名を強化してみてくださいinputMapそうすれば、コンパイル時の型チェックができるようになるので、ひどいキャストを取り除くことができます。最良の場合、これによりコンパイラは、このメソッドを間違って型付けされたinputMap. その後、コンパイラの指示に従うだけで、エラーを簡単に修正できるはずです。それが機能しない場合は、呼び出しで生の型も使用している可能性があり、スタック トレースを掘り下げて修正する必要があります。

于 2013-06-16T11:05:53.403 に答える
0

置き換え: public static submitService(HashMap<'String,ArrayList<'String>> inputMap) throws Exception

例外を見ると、渡されたパラメーターに文字列の配列リストが含まれていないことがわかります。ArrayList<'Object> (リストに long 値が存在し、最終的に文字列にキャストされる) または Arraylist<'Long> のように見えます。

于 2013-06-16T10:09:12.637 に答える
0

これを試して:

public static HashMap<String,ArrayList<String>> submitService(HashMap<String,ArrayList<String>> inputMap) throws Exception
{
    //code....

    ArrayList<String> allIdsList = inputMap.get("Result_List");
            for(int i=0;i<allIdsList.size();i++)
        {
            System.out.println(" values: " + allIdsList.get(i));
        }
}
于 2013-06-16T10:09:19.813 に答える