Различение полей класса Grails и методов getBlah () через GrailsDomainClassProperty - PullRequest
2 голосов
/ 22 октября 2010

Я пишу скрипт Groovy (как часть плагина Grails) и хочу получить список свойств для GrailsDomainClass, который может определить пользователь моего плагина.Я могу сделать это, используя domainClass.properties (где domainClass - это GrailsDomainClass ).

Однако предположим, что у пользователя есть класс домена grails:

class Example {
  String name

    static constraints = {
    }

  def getSomeNonExistingProperty(){
    return "Not-a-real-property"
  }
}

В этом случае domainClass.properties возвращает список с name и someNoneExistingProperty

Я понимаю, что это связано с тем, что Grails генерирует свойство «только для чтения» на лету для использования там, где у кого-то есть метод getBlah ().Это здорово, но в моем скрипте я хочу выполнить некоторые действия только с «настоящими» свойствами (или, по крайней мере, не только для чтения).

То есть я хотел бы, чтобы какой-то способ отличить или идентифицировать someNonExistingProperty как свойство только для чтения или, альтернативно, как свойство, сгенерированное Grails и не введенное явно как поле в domainClass посредствомПользователь моего плагина.

Я посмотрел на класс GrailsDomainClassProperty , и у него есть ряд методов, предоставляющих информацию о свойстве.Тем не менее, ни один из них не говорит мне, является ли свойство доступным только для чтения или позволяет мне различать поле, определенное в domainClass, и поле, создаваемое Grails на лету в результате действия getSomeNonExistingProperty.() "method.

Я что-то упускаю здесь очевидное?Есть ли способ получить список только явно определенных пользователем полей (например, name, в приведенном выше примере)?

Ответы [ 2 ]

1 голос
/ 22 октября 2010

Я считаю, что переходные свойства - это то, что вы пытаетесь исключить

0 голосов
/ 22 октября 2010

Я сталкивался с этой проблемой несколько раз, и вместо того, чтобы обойти ее, я обычно просто переименовываю свой метод getX(). Это, наверное, самый простой вариант.

Edit: Кроме того, мне интересно, могли бы вы использовать рефлексию, чтобы увидеть, какие методы определены в классе, и, перебирая свои свойства, посмотреть, есть ли у свойства явный определенный получатель, и опустить его. Я не очень знаком с рефлексией, когда речь идет о Groovy и Grails, особенно с динамическими методами, но это возможный путь исследования.

...