如何防止在Object数组中获取Groovy布尔值?

时间:2012-02-20 15:23:31

标签: java groovy boolean

我正在尝试创建一个要传递给方法(IDescriptor)的Object数组(Object []):

Object[] newValues = {
  Boolean.TRUE
}
descriptor.setParameters(newValues)

特定描述符期望数组中的第一个值是 java.lang.Boolean 对象。但是,似乎Groovy正在转换为它自己的布尔类,当我运行代码时(上面不是完整代码),描述符报告数组中的第一个Object不是java.lang.Boolean对象。 / p>

这不是非常有用的,这是堆栈跟踪:

org.openscience.cdk.exception.CDKException: The first parameter must be of type Boolean
        at org.openscience.cdk.qsar.descriptors.molecular.AromaticAtomsCountDescriptor.setParameters(AromaticAtomsCountDescriptor.java:118)

当我添加一个断言(在错误中重复)时,我收到此错误:

assert newValues[0] instanceof java.lang.Boolean
       |        |   |
       |        |   false
       |        AromaticAtomCountDescriptorParams$_run_closure3@1cc5069
       [AromaticAtomCountDescriptorParams$_run_closure3@1cc5069]

如何确保Groovy在数组中使用Java Boolean类,而不是使用更丰富的类?

1 个答案:

答案 0 :(得分:3)

使用正确的大括号:

Object[] newValues = [ true ]

您使用{}创建闭包。这也有效,因为闭包具有很多特殊功能,但它们不是列表是数组。因此,Groovy将单个元素包装在列表的右侧,然后分配数组newValues