1

私はgroovyを初めて使用し、プロジェクトのソースを読んでいます

import org.codehaus.jackson.map.ObjectMapper
class JacksonCategory {
static final ObjectMapper mapper = []
    ...
}

コードがわかりませんが、ここではどういう意味ですかObjectMapper mapper = [][]だと思ったのですlistが、どうやって割り当てるのObjectMapper


アップデート

デューンズの答えにもよるが、[]意味があるようだinvocation of default constructor。つまり、次のことを意味します。

static final ObjectMapper mapper = new ObjectMapper()

だが:

String s = []
println s // -> it's `[]` not ``

Integer i = []

例外をスローします:

Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[]' 
with class 'java.util.ArrayList' to class 'java.lang.Integer' 
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[]' with class  
'java.util.ArrayList' to class 'java.lang.Integer'
4

1 に答える 1

6

これは、ObjectMapper のデフォルト コンストラクターへの呼び出しです。

http://mrhaki.blogspot.com/2009/09/groovy-goodness-using-lists-and-maps-as.html

常に空の ArrayList として作成されるように見え[]ますが、別の型に割り当てられると、groovy は型強制を実行して適切なコンストラクターを見つけようとします。

文字列の場合は、リストで toString メソッドを呼び出して、それを文字列にします。オブジェクトの場合、適切な数と型の引数を持つコンストラクターを探します。

Groovy では、Number (Integer、BigDecimal など) を拡張する Java ライブラリ クラスに対してこれを行う必要はなく、代わりに ClassCastException をスローします。

例:

class A {
    String value;
    A() { this("value"); }
    A(String value) { this.value = value; }
}

def A defaultCons = [];
// equivalent to new A()
def A argsCons = ["x"];
// equivalent to new A("x")
def list = [1,2];
// literal ArrayList notation
def String str = [];
// equivalent to str = "[]"

println "A with default constructor: " + defaultCons.value;
println "A with String arg constructo: " + argsCons.value;
println "list: " + list;
println "str: " + str;
于 2011-08-20T08:23:03.077 に答える