2015-04-15 2 views
1

Поскольку Java винт более с точки зрения упорядочения методов и полей, я хочу, чтобы определить точный порядок они объявлены в.Java 8 Получить точный порядок класса Члены

С Java 6 (или около того) в JVM обычно возвращается члены в случайном порядке, я посмотрел на Javassist, ASM и Bcel. Bcel не поддерживает Java 8, Javassist - это боль, потому что кажется, что он не оценивает правильный порядок между методами и полями (сначала он использует поля, затем методы, даже если поля находятся между методами).

Так ASM швы, чтобы быть лучшим выбором, но он имеет только строковое представление, которое является болью.

Кто-нибудь знает лучший способ?

[Update]

Идея заключается в том, чтобы использовать аннотации для текущего метода связывания контента для первого способа. Я пишу препроцессор для 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] Я только что обновил код, чтобы исправить, а также показать альтернативное форматирование.

+10

Зачем вы хотите это сделать? В зависимости от заказа кажется опасным. – Necreaux

+0

Это то, что вы хотите? http://stackoverflow.com/questions/2126714/java-get-all-variable-names-in-a-class – Shar1er80

+5

Это звучит как [проблема XY] (http://meta.stackexchange.com/questions/66377/что-это-The-ху-проблема). Не могли бы вы рассказать нам свои общие цели? – christopher

ответ

0

Ну, большая проблема решена. Оба API (ASM и Javassist) не поддерживают получение правильного порядка полей и (!) Методов, поскольку - ну - формат файла класса не поддерживает это. Он просто имеет набор полей и набор методов. (https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html)

Это убивает идею, которую я имел в виду об использовании аннотаций определенным образом.

Смежные вопросы