Поскольку ["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 существуют массивы.
В своем интервью в Coders at Work Гай Стил рассказывает о выборе, сделанном при разработке языка:
"Это проблема кодирования Хаффмана. Если вы сделаете что-то сжатое,
как следствие, что-то должно быть более многословным. Так в
разработка языка, одна из вещей, о которых вы думаете: «Что такое
вещи, которые я хочу сделать очень легко сказать и очень легко получить
право?' Но с пониманием, что, использовав персонажей или
символы для этой цели, вам придется сделать что-то еще
немного сложнее сказать. "
Похоже, что Groovy сделал списки более краткими, с побочным эффектом, что массивы стали более многословными.