这是一个关于Java如何在内部进行反射的问题。
我有一个抽象的课程说
SuperClass
和SuperClass的两个chlid类,
ChildClass1
和ChildClass2
。
SuperClass
定义了一个访问方法getValue()
,虽然它没有定义属性值。
ChildClass1
和ChildClass2
覆盖方法getValue()
,并且都向方法添加注释@MyAnnotation
,@MyAnnotation
保留在运行时(它是{{} 1}}注释)。
在我的程序中,我有OneToOne
的实例和ChildClas1
的实例。我使用反射从两个对象中获取所有方法。
正如预期的那样,我在结果数组中得到了两个ChildClass2
方法(一个用于getValue()
,另一个用于SuperClass
。
对于ChildClass
ChildClass1
方法的实例,getValue()
方法已将@MyAnnotation
标记为访问者(methodAccessor属性!= null),但对于ChildClass2
的实例,标记的方法作为访问者没有注释(是父类的getValue()
方法)。
我无法理解为什么,最终我改变了在ChildClass2
中声明方法的顺序(有更多的方法而不仅仅是访问器),即我把所有的getter和setter放在begginging和{{ 1}}表现为ChildClass2
。
我的问题是, Java如何在反射中将方法限定为访问者,并且声明方法的顺序是否会改变反射的行为?
答案 0 :(得分:2)
Java如何在反射中将方法限定为访问器,
它不是JavaBean是Reflections库不知道的对象。如果你使用Beans Introspector,这确实可以通过名称和参数数量来假设getter和setter。
并且声明方法的顺序是否会改变反射的行为?
定义方法的顺序往往是它们被检索的顺序,例如getMethods()但你不能依赖这种行为。
答案 1 :(得分:0)
Java反射不区分访问者方法与其他方法 - 所有只是方法。声明方法的顺序并不重要。