2009-12-21 158 views

回答

18

因爲[ 「[email protected]」]計算爲一個ArrayList,而不是一個數組:

groovy:000> o = ["asdf"] 
===> [asdf] 
groovy:000> o.getClass() 
===> class java.util.ArrayList 

OTOH你的宣言創建一組對象:

groovy:000> Object[] args = ["asdf"] 
===> [Ljava.lang.Object;@14e113b 

和t他調用的方法需要一個數組。可以創建使用as陣列:

Object[] args = ["asdf"] as Object[] 

Groovy的創作者製作使更高級別的數據結構,例如鏈表慣用的一個點,而陣列存在使用Java的互操作性。

在他打碼機採訪約在設計語言所作出的選擇工作蓋伊斯蒂爾會談:

「有這個霍夫曼編碼問題,如果你想讓它簡潔, 事情是不得不因此,在設計一種語言時,你考慮的一個問題是'我想說的東西很容易說出來,而且很容易得到 對不對?但有了這樣的理解,在用完字符或符號後,你將不得不做出其他更難以說明的事情。「

它看起來像Groovy使列表更簡潔,數組變得更加冗長的副作用。

+0

有道理,但似乎做一個麻煩使用的方法,我想我希望它是更多的「常規」 – 2009-12-21 17:33:20

+1

你可以將其更改爲[ 「[email protected]」]。指定者()。沒有太多更好,但至少它是內聯的。 – 2009-12-21 18:09:49

1

Nathan已經(正確)在語言層面解釋了這種行爲的原因。我只想提升一個抽象層次:爲什麼直接使用Spring的MessageSource,首先呢?在Grails中有一個message tag,封裝了消息來源:

g.message(code: 'UserService.msg.forgot.unknown', args: ["[email protected]"])