getClass () возвращает другой класс, зависит от переменной, объявленной как def или env [duplicate]

Всего 1 ответ


Поскольку вы не сообщите нам о своем окружении (SoapUi, jenkins, grails и т. Д.) Или о том, что на самом деле представляет собой env, на самом деле невозможно ответить на ваш вопрос с должной точностью.

С учетом вышесказанного, для примера того, как вы можете в конечном итоге вести себя в своем коде, возможны такие необычные вещи, как:

class Env { 
  private String val

  String getY() {
    val
  }

  void setY(String val) {
    this.val = val
  }
}

def env = new Env()

def x = ["one":["D7D7D7", "D2D2D2"]]
env.y = ["two":["D7D7D7", "D2D2D2"]]

env.with { 
  println(x.getClass()) // -> returns java.util.LinkedHashMap
  println(y.getClass()) // -> returns java.lang.String
}

где из этого кода мы сразу видим, что свойство y (в groovy, представленном как методы getY и setY и доступ к которому напрямую осуществляется через env.y и env.y = ... ), имеет тип String и хэш-карта автоматически преобразуется в строка в строке env.y = ["two":["D7D7D7", "D2D2D2"]] поскольку переменная, которую мы назначаем, имеет тип String .

Это пример одного механизма, который может заставить код, подобный вашему, возвращать значения, которые он делает. Как упомянуто выше, вы не предоставляете достаточно информации, чтобы дать более полный ответ, не делая надежных предположений относительно того, в каком контексте вы выполняете свой код.


Есть идеи?

10000