如何按源顺序获取方法

Ran*_*een 5 java annotations annotation-processing

我有一个自定义注释,我想在运行时使用它来显示对象属性。我希望它们以源代码顺序出现,但反射并不能保证Class.getMethods().

有没有办法通过反射或通过注释处理来按源顺序获取方法(如果涉及多个继承级别,至少每个类)?

举个例子,假设我有一个界面 Property

package test;

public @interface Property {
    public String name();
}
Run Code Online (Sandbox Code Playgroud)

和一个使用该注释的类

package test;

public class MyObject {
    @Property(name = "First")
    public void getFirst() {}

    @Property(name = "Another")
    public void getAnother() {}
}
Run Code Online (Sandbox Code Playgroud)

我想在属性“另一个”之前可靠地获得“第一个”属性。

我知道我可以在我的注释中添加一个排序属性并对其进行排序,但是如果需要的话,我有很多需要更新的类,所以我正在寻找一种通用方法来实现这一点,而无需修改单个注释。

Ran*_*een 3

看来这通过反射是不可能的,除非您愿意并且能够更改原始源以通过附加注释或现有注释的属性施加顺序。

然而,在注释处理期间这是可能的。]的文档表明TypeElement.getEnclosedElements()

所包含元素的列表将按照有关类型的原始信息源的自然顺序返回。例如,如果有关类型的信息源自源文件,则元素将按源代码顺序返回[强调]。

为了使其在运行时可用,您需要使用注释处理方法并将其存储在运行时可访问的位置(例如生成的资源文件)。