由于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] 我刚刚更新了代码以更正并显示替代格式。
答案 0 :(得分:0)
大问题解决了。这两个API(ASM和Javassist)都不支持获取字段和(!)方法的正确排序,因为 - 好 - 类文件格式不支持这一点。它只有一组字段和一组方法。 (https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html)
这使我想到了以特定方式使用注释的想法。