Получить название аннотации, используя Apache Bcel - PullRequest
0 голосов
/ 21 апреля 2020

Я использую этот код для получения Java аннотации класса:

JavaClass jclas = new ClassParser("src\\test\\org\\poc\\TestClass.class").parse();

ClassGen cg = new ClassGen(jclas);

AnnotationEntryGen[] attributes = cg.getAnnotationEntries();

for (AnnotationEntryGen attribute : attributes) {
    System.out.println("attribute: " + attribute);
    if(attribute.getTypeName().contains("Fix")) {
        // Do something
    }
}

Но когда я печатаю attribute.getTypeName(), я получаю Lorg/annotations/Fix. Имя аннотации @Fix(..) Знаете ли вы, как я могу получить только имя?

1 Ответ

0 голосов
/ 21 апреля 2020

Строка типа `" Lorg / annotations / Fix "является дескриптором поля . Java имеет много разных форматов для имен классов.

Вы можете преобразовать имя в различные форматы, используя Signatures class из пакет mirror-util .

Имя аннотации @Fix(..).

Эта терминология неверна; Вы показали, как полная аннотация пишется в Java исходном коде, но это не его имя. getTypeName() действительно вернул его имя (в формате дескриптора поля).

Если вам нужны элементы аннотации (которые появляются в скобках, когда аннотация пишется в Java исходном коде), используйте getValues(). Вы также можете найти toString() полезным.

...