0

我正在尝试匹配文件前缀是否与我的对象匹配,但我得到了一个 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

非常感谢你

4

1 回答 1

2

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

listeClients.get(i)

它实现为

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

导致一个ClassCastException.

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

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

于 2013-03-16T19:37:28.843 回答