これは、Java が内部でどのようにリフレクションを行うかについての質問です。
私は抽象クラスに言う
SuperClass
SuperClass からの 2 つの子クラス、
ChildClass1とChildClass2。
SuperClassgetValue()属性値を定義していませんが、アクセサメソッドを定義しています。
ChildClass1メソッドをChildClass2オーバーライドし、両方ともメソッドにアノテーションをgetValue()追加し、実行時に保持されます(これはアノテーションです)。@MyAnnotation@MyAnnotationOneToOne
私のプログラムには、 のインスタンスChildClas1と のインスタンスがありますChildClass2。リフレクションを使用して、両方のオブジェクトからすべてのメソッドを取得しました。
予想どおりgetValue()、結果の配列に 2 つのメソッドが含まれています (1 つは 用、SuperClassもう 1 つは 用ChildClass)。
ChildClass1アクセサーとしてマークされたgetValue()メソッドのインスタンスの場合@MyAnnotation(methodAccessor プロパティ != null)、ChildClass2アクセサーとしてマークされたメソッドのインスタンスの場合は、注釈がありませんでした (getValue()親クラスのメソッドでした)。
理由がわかりませんでしたが、最終的にメソッドが宣言された順序を変更しましたChildClass2(アクセサーだけでなく、より多くのメソッドがありました)。つまり、すべてのゲッターとセッターを物乞いに置きChildClass2、ChildClass1.
私の質問は、Java がメソッドをリフレクションのアクセサとしてどのように修飾するか、さらにメソッドが宣言される順序によってリフレクションの動作が変わるかどうかです。