尝试与startswith匹配时抛出异常

时间:2013-03-16 19:31:55

标签: java

我正在尝试匹配文件前缀是否与我的对象匹配,但我得到了classcastexception

 for (int i=0;i<files.length;i++)
        {
            File f= files[i];
            String s=listeClients.get(i).getShortname();
            if(f.getName().startsWith(s))
            {
            System.out.println("file: " + f.getName());
            }
        }

我将一个字符串传递给startwith方法,所以我不明白为什么会出现这个错误:

Caused by: java.lang.ClassCastException: java.lang.Boolean cannot be cast to com.dev.pojo.Clients

非常感谢

1 个答案:

答案 0 :(得分:2)

问题显然是listeClients 声明List<com.dev.pojo.Clients>,但在运行时它实际上包含 a java.lang.Boolean。由于泛型的实现方式(称为"erasure"),JVM实际上无法检测到它,直到它到达

listeClients.get(i)

它实现为

((com.dev.pojo.Clients)(listeClients.get(i))

产生ClassCastException

您需要找到并修复将java.lang.Boolean插入此列表的代码;并且您可能需要更多地关注编译器警告,因为您的编译器可能通过关于未经检查的强制转换的警告消息警告您这种可能性。

(另外,正如其他人指出的那样,您需要在if条件之后删除分号。但这不是您发布的异常的来源,因为它发生在该行之前。 )