Вопрос создания массива объектов Groovy
почему это исключение?
messageSource.getMessage('UserService.msg.forgot.unknown', ["test@mail.com"], null)
Если я не сделаю этого...
def Object[] args = ["test@mail.com"]
messageSource.getMessage('UserService.msg.forgot.unknown', args, null)
2 ответов
потому что ["test@mail.com"] вычисляет ArrayList, а не массив:
groovy:000> o = ["asdf"]
===> [asdf]
groovy:000> o.getClass()
===> class java.util.ArrayList
OTOH ваше объявление создает массив объектов:
groovy:000> Object[] args = ["asdf"]
===> [Ljava.lang.Object;@14e113b
и метод вы звоните должен массив. Вы можете создать массив с помощью as
:
Object[] args = ["asdf"] as Object[]
создатели Groovy сделали точку создания структур данных более высокого уровня, таких как списки идиоматических, в то время как массивы присутствуют для взаимодействия с Java.
в своем интервью кодеры на работе Гай Стил говорит о выборе, сделанном при разработке языка:
Натан уже (правильно) объяснил причину такого поведения на языковом уровне. Я просто хочу, чтобы перейти на один уровень абстракции вверх: Почему вы используете весны MessageSource
напрямую, в первую очередь? В Граалях есть message
tag, который обертывает источник сообщения:
g.message(code: 'UserService.msg.forgot.unknown', args: ["test@mail.com"])