Подтвердить что ты не робот

Groovy: Введите имя поля, нужно установить значение и не хотите использовать переключатель

У меня есть объект с несколькими полями,

class TestObj { 
  def field1
  def field2
}

У меня есть пара значений v1 = "field1" и v2 = "value2" Я хотел бы установить v2 в соответствующее поле, основанное на имени v1, но я бы предпочел не делать этого с помощью switch или if, я продолжаю думать, что для достижения результата должен быть гораздо более "отличный" способ, чем делать что-то вроде этого:

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
}

Однако это не работает, говоря, что нет свойства ${fieldName}

Спасибо.

4b9b3361

Ответ 1

Вы можете использовать GStrings, когда вы получите поле, например:

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

Ответ 2

В Groovy вам не нужно определять свойство, чтобы иметь свойство. Используйте getProperty и setProperty вызовы доступа к свойствам в 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