#groovy
#groovy
Вопрос:
Могу ли я каким-либо образом переопределить значение asBoolean для базового класса в Groovy? Я пытался
Number.metaClass.asBoolean = {false}
Хотя это работает для не-Groovy классов, я не могу найти, как выполнить тот же трюк для Number или любого другого предопределенного класса.
Ответ №1:
Я мог бы воспроизвести вашу проблему при выполнении скрипта в GroovyConsole. Однако при выполнении в виде .groovy
файла в командной строке изменение метакласса работает так, как ожидалось.
Ответ №2:
Я думаю, вам просто не хватает ->
. Это работает для меня
Number.metaClass.asBoolean = {-> false}
assert !2.asBoolean() // Normally 2 evaluates to true
Комментарии:
1. @tim_yates но если вы опустите
->
, то, несомненно, вы перегрузите (а не переопределите)asBoolean()
метод, определенный Groovy, с помощью методаasBoolean(Object obj)
2. Кажется, для меня работает в любом случае … (предполагая, что я делаю
Integer.metaClass
, а неNumber.metaClass
)