【问题标题】:How to write correct expression to result to Boolean? (Cannot cast from boolean to Boolean)如何将正确的表达式写入布尔值? (不能从布尔值转换为布尔值)
【发布时间】:2012-02-22 19:07:44
【问题描述】:

我在处理一个应该导致在 iReport 中显示或隐藏波段的表达式时遇到困难。

这些是我拥有的变量:

Integer mainGroupInt = Integer.valueOf(5);
Integer subGroupInt = Integer.valueOf(5);
Boolean showDetailGroup = Boolean.valueOf(false);

结果一定是Boolean,所以我尝试了以下:

mainGroupInt.intValue() != 0 && subGroupInt.intValue() != 0)) || (mainGroupInt.intValue() != 0 && showDetailGroup)

因此这不起作用,我收到以下错误:

boolean 类型的表达式被装箱成 Boolean

我想太多了,但我无法解决它。

感谢您的帮助。

【问题讨论】:

  • 所以...这行得通,但你想让它更优雅吗?
  • 不,不幸的是它不起作用,我在帖子中得到了更新的错误。

标签: java jasper-reports ireport boolean-expression


【解决方案1】:

你在找...

showDetailGroup = Boolean.valueOf( (mainGroupInt.intValue() != 0 && subGroupInt.intValue() != 0) || 
                                   (mainGroupInt.intValue() != 0 && showDetailGroup.booleanValue()) )

如果不是,我不明白你的问题。上面的代码返回一个Boolean 代表boolean 表达式的值。请参阅 Java Boolean.valueOf()Boolean.booleanValue() 文档。

【讨论】:

  • 这不起作用。如果我尝试这个,它会在 showDetailGroup 上给出一个错误。然后错误是:布尔类型的表达式被取消装箱为布尔值。
  • @adis,我编辑了我的答案。您还需要在布尔表达式(.booleanValue() 方法)中将布尔值转换回布尔值。我一开始并没有注意到。
【解决方案2】:

不拆箱就不能在布尔表达式中使用布尔值(大写 B)。

如果您想消除警告,请通过调用 booleanValue 函数将 Boolean 转换为原始类型(这是在取消装箱的幕后发生的事情):

mainGroupInt.intValue() != 0 && showDetailGroup.booleanValue( )

【讨论】:

    【解决方案3】:

    Boolean 和 Integer 是原语 boolean 和 int 的包装类。如果必须通过引用函数来传递变量,则应将变量更改为 boolean 和 int 并在稍后将它们包装起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-24
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      相关资源
      最近更新 更多