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() напрямую.