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控制台中打印(我只是尝试查看列表是否为空)。但是 for(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

替换: public static submitService(HashMap<'String,ArrayList<'String>> inputMap) 抛出异常

查看异常,可以确定传递的参数没有字符串的arraylist。看起来它可能是ArrayList<'Object>(列表中存在长值,最终被转换为String)或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 回答
0

这是inputMap从哪里来的?从外观上看,它的值不是类型ArrayList<String>,而是类似于ArrayList<Object>or的东西ArrayList<Long>。问题似乎出在您发布的代码段之外。

由于您在此方法中使用原始类型,编译器不会抱怨(尽管它应该警告您使用原始类型)。但是,VM 会抛出一个ClassCastException演员失败的地方——这就是你所看到的。

尝试通过仅接受HashMap<String, ArrayList<String>>as来加强您的签名inputMap。这样,您就可以摆脱那些可怕的强制转换,因为您现在可以进行编译时类型检查。在最好的情况下,这将为编译器提供足够的信息,以指出您在哪里调用此方法时键入了错误的inputMap. 然后,您应该能够仅按照编译器的说明轻松修复错误。如果这不起作用,您可能也在调用中使用原始类型,您需要挖掘堆栈跟踪以修复这些问题。

于 2013-06-16T11:05:53.403 回答