私はgroovyを学んでいます。私はそのメタプログラミング機能に関する質問があります。 Groovyのすべてのオブジェクトはgroovy.lang.GroovyObjectインタフェースを実装しています(groovyコンパイラによって暗黙的に追加されています)。後者のインターフェースはメソッドgetMetaClassを(含まれている)ので、私は次の操作を実行できます。groovyのjavaクラスのmetaClassプロパティ
class MyGroovyClass{
}
def myGroovyClass = new MyGroovyClass();
println myGroovyClass.metaClass.name
私は理解していない事がjava.lang.StringでのようなJavaコンパイラによってコンパイルされたオブジェクトは、メタクラスのプロパティを取得する方法です。このプロパティは、MetaClassRegistryを介してJavaクラスに関連付けられた実際のMetaClassオブジェクトで定義されていますか?
しかし、groovy.runtime.DefaultGroovyMethodsで定義されているこれらのメソッドはどのように呼び出されますか? Groovyコンパイラは、明示的にjdkクラスへのメソッド呼び出しを探し、これらをインターセプトしてDefaultGroovyMethodsで定義されたメソッドを呼び出すバイトコードを生成しますか?これは、jdkで定義されたJavaクラスだけがgetMetaClass()メソッドを取得することを意味しますか? –
@ JamesV.H。 Groovyオブジェクトには明らかにプロパティがあります。「メソッドを取得する」とはどういう意味ですか? –
@DaveNewtonはい私はgroovyでコンパイルされたオブジェクトはプロパティを持っていることを理解しています。javaコンパイラでコンパイルされたクラスは明らかにプロパティを持っていませんが、依然としてmetaClassプロパティを呼び出すことができます。 Ataylorは、追加されたメソッドが(DefaultGroovyMehodsの)どこに定義されているのかをコメントしましたが、どのように関連付けメカニズムが動作するのかをコメントしていませんでした。 –