Java 8获得类成员的确切顺序

时间:2015-04-15 20:36:13

标签: java

由于java在排序方法和字段方面有所停顿,我想确定它们的确切顺序。

由于Java 6(左右)JVM通常以随机顺序返回成员,因此我查看了Javassist,ASM和Bcel。 Bcel不支持Java 8,Javassist很痛苦,因为它似乎不重视方法和字段之间的正确排序(它首先使用字段,后面的方法即使字段位于方法之间)。

所以ASM接缝是最好的选择,但它只有字符串表示,这很痛苦。

有谁知道更好的方法吗?

[更新]

这个想法是使用当前方法的注释来绑定前一个方法的内容。我为C / ASM编写了一个预编译器,它应该是这样的:

public class Test {
    public native int add(int a, int b);
    @C("return a + b;")

    public native int sub(int a, int b); @C({
       "int result = a - b;",
       "return result;"
    })

    public native int power2(int a); @ASM({
         "mov eax, a",
         "shl eax, 1"
    })

    private boolean eof;
}

正如您所看到的,我们的想法是使用最终字段eof将最后一个方法的注释绑定到它。它接缝我将强制使用eof字段并使用约定。

[UPDATE2] 我刚刚更新了代码以更正并显示替代格式。

1 个答案:

答案 0 :(得分:0)

大问题解决了。这两个API(ASM和Javassist)都不支持获取字段和(!)方法的正确排序,因为 - 好 - 类文件格式不支持这一点。它只有一组字段和一组方法。 (https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html

这使我想到了以特定方式使用注释的想法。