Groovy - правильный способ реализации метода getProperty

Мне нужно запускать некоторый код всякий раз, когда извлекается значение свойства, поэтому, естественно, имеет смысл определить метод getProperty в моем классе. Этот метод будет автоматически вызываться при получении значения свойства. Вот примерно то, что я имею в своем классе:

class MyClass
{
  def getProperty(String name)
  {
   // Run some code ...

    return this.@"${name}"
  }
}

Проблема с вышеуказанным методом возникает, когда кто-то пытается сделать следующий вызов где-то:

MyClass.class

Этот вызов заканчивается в методе getProperty, который ищет свойство с именем "class", однако фактического свойства с именем "class" не существует, поэтому мы получаем исключение MissingFieldException.

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

2 ответа

Лучше не использовать метод getProperty, если он не нужен. Если он вам нужен и вы хотите использовать стандартную логику Groovy, вы можете использовать return getMetaClass().getProperty(this, property), как можно найти в GroovyObjectSupport, Это будет охватывать не только поля.

Это, кажется, общая проблема с этим методом. Карта имеет ту же проблему. Разработчики groovy обошли проблему с Map, сказав, что вам нужно использовать getClass() напрямую.

Другие вопросы по тегам