Переопределить значение asBoolean для числа в Groovy

#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 )