,有人能告诉我这里做错了什么吗
(Util.parseBoolean((String)request.getAttribute("testVal"), false))
我收到这个错误。
java.lang.ClassCastException: java.lang.Boolean incompatible with java.lang.String
如果我从请求中得到的值会这样做。感谢
Util只查找请求值,如果是y或true,则返回布尔值true。但我的问题是,当它走到这一行时,它抛出异常,说这个错误,所以我无法知道发生了什么
当您遇到异常并且不了解是什么原因导致异常时,一个好的第一步是准确地隔离它发生的位置。在这一行代码中发生了很多事情,所以很难确切知道是什么操作导致了错误。
查看异常的完整堆栈跟踪可能会有所帮助,因为它可以让您了解异常发生时在执行路径中的位置。
然而,一种简单的调试技术是将具有多个操作的一行拆分为具有较少操作的多行,并查看哪一行实际生成异常。在您的情况下,这可能类似于:
Object o = request.getAttribute("testVal");
String s = (String) o;
boolean b = Util.parseBoolean( s, false )
如果Shivan Dragon提出的原因是正确的,那么异常将发生在这三行中的第二行。
很可能这段代码:request.getAttribute("testVal")
返回一个布尔值,该值不能强制转换为String,因此出现(运行时)异常。
任一:
- 检查用布尔值(类似于
request.setAttribute("testVal", Boolean.FALSE)
)填充请求属性"testVal"的代码,并将该值替换为String
或
- 不要在代码中将值强制转换为String,也不要使用看起来像是实用程序类的东西来从String(*)中构建布尔值
(*)顺便说一句,布尔类可以独自完成这一切,无需为此制作自己的库:
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Boolean.html#valueOf(java.lang.String)