这是一个关于Java如何在内部进行反射的问题。
我有一个抽象类说
SuperClass
和两个来自 SuperClass 的 chlid 类,
ChildClass1
和ChildClass2
。
SuperClass
定义了一个访问器方法getValue()
,尽管它没有定义属性值。
ChildClass1
并ChildClass2
覆盖该方法getValue()
并为该方法添加一个注释@MyAnnotation
,@MyAnnotation
保留在运行时(它是OneToOne
注释)。
在我的程序中,我有一个实例ChildClas1
和一个ChildClass2
. 我使用反射从两个对象中获取所有方法。
正如预期的那样,我getValue()
在结果数组中得到了两种方法,(一种用于 the SuperClass
,一种用于ChildClass
)。
对于已标记为访问器ChildClass1
的getValue()
方法的实例@MyAnnotation
(methodAccessor 属性!= null),但对于ChildClass2
标记为访问器的方法的实例没有注释(是getValue()
父类的方法)。
我不明白为什么,最终我改变了声明方法的顺序ChildClass2
(有更多的方法,而不仅仅是访问器),即我把所有的 getter 和 setter 都放在了 begginging 并且ChildClass2
表现得像ChildClass1
.
我的问题是,Java 如何将方法限定为反射中的访问器,并且声明方法的顺序是否会改变反射的行为?