1

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

我有一个抽象类说

SuperClass

和两个来自 SuperClass 的 chlid 类,

ChildClass1ChildClass2

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

ChildClass1ChildClass2覆盖该方法getValue()并为该方法添加一个注释@MyAnnotation@MyAnnotation保留在运行时(它是OneToOne注释)。

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

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

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

我不明白为什么,最终我改变了声明方法的顺序ChildClass2(有更多的方法,而不仅仅是访问器),即我把所有的 getter 和 setter 都放在了 begginging 并且ChildClass2表现得像ChildClass1.

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

4

2 回答 2

2

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

它不是 JavaBean 是反射库不知道的约定。如果您使用 Beans Introspector,这确实会根据参数的名称和数量对 getter 和 setter 做出假设。

并且进一步声明方法的顺序会改变反射的行为吗?

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

于 2012-06-27T09:39:34.793 回答
0

Java 反射不会将访问器方法与其他方法区分开来——它们都只是方法。声明方法的顺序无关紧要。

于 2012-06-27T09:39:32.333 回答