Groovy对象数组创建问题

Aar*_*ers 8 grails groovy

为什么会抛出异常?

messageSource.getMessage('UserService.msg.forgot.unknown', ["test@mail.com"], null) 
Run Code Online (Sandbox Code Playgroud)

除非我这样做......

def Object[] args = ["test@mail.com"]
messageSource.getMessage('UserService.msg.forgot.unknown', args, null) 
Run Code Online (Sandbox Code Playgroud)

Nat*_*hes 18

因为["test@mail.com"]计算为ArrayList,而不是数组:

groovy:000> o = ["asdf"]
===> [asdf]
groovy:000> o.getClass()
===> class java.util.ArrayList
Run Code Online (Sandbox Code Playgroud)

OTOH您的声明创建一个对象数组:

groovy:000>  Object[] args = ["asdf"]
===> [Ljava.lang.Object;@14e113b
Run Code Online (Sandbox Code Playgroud)

你正在调用的方法需要一个数组.您可以使用as以下命令创建数组:

Object[] args = ["asdf"] as Object[]
Run Code Online (Sandbox Code Playgroud)

Groovy创建者提出了更高级别的数据结构,如列表惯用语,而数组则用于与Java的互操作性.

工作中的Coders采访中, Guy Steele谈到了设计语言时的选择:

"这就是霍夫曼的编码问题.如果你把事情弄得简洁,那么事情就会变得更加冗长.因此,在设计一种语言时,你要考虑的事情之一是,'我想做什么?很容易说出来并且很容易做对吗?但是有了这样的理解,为了那个目的而用完了字符或符号,你将不得不做一些其他更难说的东西."

看起来Groovy看起来更简洁,副作用是数组变得更加冗长.