我试图匹配文件前缀是否与我的对象匹配,但我遇到了类转换异常
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
非常感谢
最佳答案
问题显然是 listeClients
声明为 List<com.dev.pojo.Clients>
,但在运行时它实际上包含一个 java.lang.Boolean
。由于泛型的实现方式(称为 "erasure" ),JVM 无法真正检测到这一点,直到它到达
listeClients.get(i)
它实现为
((com.dev.pojo.Clients)(listeClients.get(i))
结果是ClassCastException
.
您需要找到并修复插入 java.lang.Boolean
的代码进入这个列表;并且您可能需要更多地关注编译器警告,因为您的编译器可能会通过有关未经检查的强制转换的警告消息警告您这种可能性。
(此外,正如其他人指出的那样,您需要删除 if
条件后面的分号。但这不是您发布的异常的来源,因为它发生在该行之前。)
关于java - 尝试与 startwith 匹配时类强制转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453748/