Оба эти
println 'test'.toBoolean() //false
println new Boolean('test') //false
создают экземпляр java.lang.Boolean
, используя конструктор, который принимает один аргумент String.Согласно javadocs , правило гласит:
Выделяет логический объект, представляющий значение true, если строковый аргумент не равен нулю и равен, игнорируя регистр, строке "правда".В противном случае выделите логический объект, представляющий значение false.
В обоих вышеупомянутых случаях строка не соответствует 'true' (без учета регистра), поэтому созданное логическое значение имеет значение false.
В отличие от этого 'test' as Boolean
следует заПравила языка Groovy для приведения к логическому , который позволяет писать:
if ('hello') {
println 'this string is truthy'
}
Для строки правило состоит в том, что, если оно пустое или нулевое, оно оценивается как ложное, в противном случаеtrue.
Я согласен, что это можно считать немного противоречивым, но учитывая выбор между согласованностью с конструктором java.lang.Boolean
и утилитой, я думаю, что они были правы в выборе последнего.