0

オブジェクトがMyObjectあり、メソッドが含まれているかどうかを確認する必要がありますformat。このメソッド シグネチャに引数がないかどうか、または の引数があるかどうかを確認する必要がありますMyType。メソッドが引数なしで応答するかどうかを確認する方法がわかりません。私は次のことを試しました:

if(MyObject.metaClass.respondsTo(MyObject.class, "format"))
{ ... }
else if(MyObject.metaClass.respondsTo(MyObject.class, "format", MyType)
{ ... }

問題は、実際のメソッド シグネチャが受け取る引数の数に関係なく、最初の if チェックが常に true と評価されることです。メソッドがどの形式でも存在しない場合にのみ、false と評価されます。

今のところ、私が行ったことは単に if/else if チェックを再配置して、型付きチェックが引数なしチェックの前に来るようにすることです。これは機能しますが、それほど正確ではありません。別のオプションとして、respondsTo 呼び出しから結果リストを取得し、結果のキャッシュ メソッドに空の引数シグネチャがあるかどうかを評価します。これも機能しますが、他の署名検証がどれほど簡単であるかに比べて過剰に思えます。

編集: バージョンの追加 Grails 1.3.7 Groovy 1.8

4

1 に答える 1