2011-09-04 14 views
12

を使用したくない、:私は、値のペアを持って、V1 =「フィールド1」とv2、フィールド名を持つ値を設定する必要があると私はいくつかのフィールドを持つオブジェクトを持っているスイッチ

class TestObj { 
    def field1 
    def field2 
} 

= "value2"私は、v1をv1の名前に基づいて適切なフィールドに設定したいと思いますが、スイッチやステートメントでそれを行う必要はありません。私はそこに多くの "groovier

01:私はこれをやってみました

setValues(def fieldName, def fieldVal) { 
    if (fieldName.equals("field1")) { 
    field1 = fieldVal 
    } 
    if (fieldName.equals("field2")) { 
    field2 = fieldVal 
    } 
} 

:このような何かをやっ以外の結果を達成するための「道

setValues(def fieldName, def fieldVal) { 
    this['${fieldName}'] = fieldVal 
} 

は、しかし何のプロパティ$ {フィールド名}

おかげではありませんと言って、失敗しています。あなたはこのように、フィールドを取得するとき

+2

[OK]を、これは動作します。これを[ "$ {フィールド名}"] = fieldVal –

+1

'' 通常の文字列で、マクロでは動作しません、「$ 'is is' is is 'is is'変数の値に解決されます。 – xlson

答えて

19

あなたはGStringのを使用することができます。

def obj = new TestObj() 
def fieldToUpdate = 'field1' 
obj."$fieldToUpdate" = 3 
+5

これにつまずいた次の人に... "の代わりに一重引用符を使用すると、それは機能しません。二重引用符を使用すると、Groovyは$をサブミットします。 – RMorrisey

6

Groovyでは、プロパティを持っているプロパティを定義する必要はありません。 getPropertysetPropertyと呼ばれるプロパティアクセスフックGroovyでを使用します。

class TestObj { 
    def properties = [:] 
    def getProperty(String name) { properties[name] } 
    void setProperty(String name, value) { properties[name] = value } 

    void setValues(def fieldName, def fieldVal) {setProperty(fieldName, fieldVal)} 
} 

def test = new TestObj() 
test.anyField = "anyValue" 
println test.anyField 

test.setValues("field1", "someValue") 
println test.field1 

test.setValues("field2", "anotherValue") 
println test.field2 
関連する問題