0

プロパティ値を取得するたびに何らかのコードを実行する必要があるため、クラスで getProperty メソッドを定義するのは当然のことです。このメソッドは、プロパティ値が取得されるたびに自動的に呼び出されます。私のクラスで持っているものは大まかに次のとおりです。

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

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

上記の方法の問題は、誰かがどこかで次の呼び出しを行おうとしたときに発生します。

MyClass.class

この呼び出しは、「class」という名前のプロパティを探す getProperty メソッドで終了しますが、「class」という名前の実際のプロパティがないため、MissingFieldException が発生します。

プロパティ値が取得されるたびに実行コードを実装し、このような状況に対処する正しい方法は何でしょうか。

4

2 に答える 2

3

必要がない場合は、getProperty メソッドを使用しないことをお勧めします。それが必要で、標準の Groovy ロジックにフォールバックしたい場合はreturn getMetaClass().getProperty(this, property)、 にあるように を使用できますGroovyObjectSupport。これは単なるフィールド以上のものをカバーします。

于 2015-02-19T13:12:02.460 に答える
2

これは、この方法の一般的な問題のようです。マップにも同じ問題があります。groovy の開発者は、 getClass() を直接使用する必要があると言って Map の問題を回避しました。

于 2015-02-19T06:33:37.153 に答える