-3

有人能告诉我我在这里做错了什么吗?

(Util.parseBoolean((String)request.getAttribute("testVal"), false))

我收到此错误。

java.lang.ClassCastException: java.lang.Boolean incompatible with java.lang.String

如果我从请求中得到什么值会这样做。谢谢

Util 只查找请求值,如果它是 y 或 true,则返回布尔值 true。但我的问题是,当它进入这一行时,它会抛出异常说该错误,所以我无法知道发生了什么

4

2 回答 2

1

当您遇到异常并且您不了解导致它的原因时,好的第一步是准确隔离它发生的位置。在那一行代码中发生了很多事情,因此很难确切知道是什么操作导致了错误。

查看异常的完整堆栈跟踪可能会有所帮助,因为它可以让您了解异常发生时您在执行路径中的位置。

但是,一种简单的调试技术是将具有许多操作的一行分成许多具有较少操作的行,并查看哪一行实际生成了异常。在您的情况下,这可能类似于:

Object o = request.getAttribute("testVal");
String s = (String) o;
boolean b = Util.parseBoolean( s, false )

如果 Shivan Dragon 提出的原因是正确的,那么这三行中的第二行将发生异常。

于 2012-08-29T20:56:11.727 回答
0

很可能这段代码:request.getAttribute("testVal")返回一个布尔值,它不能转换为字符串,因此是(运行时)异常。

任何一个:

  • 检查使用布尔值(类似于request.setAttribute("testVal", Boolean.FALSE))填充请求属性“testVal”并用字符串替换该值的代码

或者

  • 不要在代码中将值转换为 String,也不要使用看似实用的类从 String (*) 中构建布尔值

(*) 顺便说一句,布尔类可以通过其孤独的自我完成所有工作,无需为此创建自己的库:

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Boolean.html#valueOf(java.lang.String )

于 2012-08-29T20:45:27.170 回答