Как предотвратить получение Groovy Boolean в массиве объектов? - PullRequest
2 голосов
/ 20 февраля 2012

Я пытаюсь создать массив объектов (Object []) для передачи в метод ( IDescriptor ):

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

Определенный дескриптор ожидает первое значение вмассив должен быть java.lang.Boolean объектом.Однако кажется, что Groovy конвертирует в свой собственный логический класс, и когда я запускаю код (приведенный выше не полный код), дескриптор сообщает, что первый объект в массиве не является объектом java.lang.Boolean.

Не то чтобы это было очень информативно, это трассировка стека:

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 (повторяется в ошибке), я получаю эту ошибку:

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

Как я могу убедиться, что Groovy использует логический класс Java в массиве вместо своего более богатого класса?

1 Ответ

3 голосов
/ 20 февраля 2012

Используйте правильные скобки:

Object[] newValues = [ true ]

Вы использовали {}, который создает замыкание . Это также работает, потому что у замыканий есть много специальных способностей, но они не списки, а массивы. Таким образом, Groovy упаковывает один элемент с правой стороны в список, а затем назначает массив newValues.

...