2012-08-29 63 views
-3

有人能告诉我什么,我在这里做错了,字符串布尔错误的Java

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

我得到这个错误。

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

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

Util只查找请求值,如果它是y或true,则返回布尔值true。但我的问题是,当它去到这条线抛出异常说这个错误,所以我不知道最新情况发生

+10

没有人知道你的Util类是做什么的。 –

+5

什么是'Util.parseBoolean'?什么是'request.getAttribute'? – Vulcan

+0

我认为他的意思是'Boolean.parseBoolean' –

回答

1

当你得到一个例外,你不明白是什么导致了它,一个好的第一步是确切地分离它发生的地方。在这一行代码中发生了很多事情,所以很难确切地知道哪些操作导致错误。

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

但是,一个简单的调试技巧是将具有许多操作的一行分成许多行中操作较少的行,并查看哪一行实际上会生成异常。在你的情况,这可能是这样的:

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

如果西瓦龙认为起因是正确的,那么异常将发生在这三条线的第二位。

+0

我得到一个对象值为false,但是当我试图将Obj转换为字符串时抛出该错误。你能建议我该怎么做才能摆脱那个错误。谢谢 – user1617247

+1

跳过中间步骤@ user1617247。你已经有了一个布尔(看起来像)。只需将'getAttribute'的返回值转换为一个布尔值,就完成了。 –

0

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

或者:

  • 支票代码填充请求属性 “名为testVal” 与布尔值(像request.setAttribute("testVal", Boolean.FALSE)),并用一个字符串

    替换值
  • 不要将代码中的值转换为String,也不要使用似乎是用于构建字符串中布尔值的工具类(*)

(*)的,顺便说一句,Boolean类可以通过它的寂寞自做,没有必要让你为自己的库:

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

+0

这是你的部分的一个大胆的假设 – 2012-08-29 20:46:06

+0

同意,这个问题是很好的编辑(最好)。我在这里疯狂猜测。 –