访问器方法和Java反射

时间:2012-06-27 09:24:46

标签: java reflection attributes getter accessor

这是一个关于Java如何在内部进行反射的问题。

我有一个抽象的课程说

SuperClass

和SuperClass的两个chlid类,

ChildClass1ChildClass2

SuperClass定义了一个访问方法getValue(),虽然它没有定义属性值。

ChildClass1ChildClass2覆盖方法getValue(),并且都向方法添加注释@MyAnnotation@MyAnnotation保留在运行时(它是{{} 1}}注释)。

在我的程序中,我有OneToOne的实例和ChildClas1的实例。我使用反射从两个对象中获取所有方法。

正如预期的那样,我在结果数组中得到了两个ChildClass2方法(一个用于getValue(),另一个用于SuperClass

对于ChildClass ChildClass1方法的实例,getValue()方法已将@MyAnnotation标记为访问者(methodAccessor属性!= null),但对于ChildClass2的实例,标记的方法作为访问者没有注释(是父类的getValue()方法)。

我无法理解为什么,最终我改变了在ChildClass2中声明方法的顺序(有更多的方法而不仅仅是访问器),即我把所有的getter和setter放在begginging和{{ 1}}表现为ChildClass2

我的问题是, Java如何在反射中将方法限定为访问者,并且声明方法的顺序是否会改变反射的行为?

2 个答案:

答案 0 :(得分:2)

  

Java如何在反射中将方法限定为访问器,

它不是JavaBean是Reflections库不知道的对象。如果你使用Beans Introspector,这确实可以通过名称和参数数量来假设getter和setter。

  

并且声明方法的顺序是否会改变反射的行为?

定义方法的顺序往往是它们被检索的顺序,例如getMethods()但你不能依赖这种行为。

答案 1 :(得分:0)

Java反射不区分访问者方法与其他方法 - 所有只是方法。声明方法的顺序并不重要。