Чтение аннотаций с использованием библиотеки Apache Bcel - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь прочитать аннотации классов, используя этот код:

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

        ClassGen cg = new ClassGen(jclas);

        Attribute[] attributes = cg.getAttributes();

        for (Attribute attribute : attributes) {
            if (attribute instanceof Annotations) {
                Annotations annotations = (Annotations) attribute;
                AnnotationEntry[] entries= annotations.getAnnotationEntries();
            }
        }

Но для этого кода attribute instanceof Annotations Я получаю ошибку: Inconvertible types; cannot cast 'com.sun.org.apache.bcel.internal.classfile.Attribute' to 'org.apache.bcel.classfile.Annotations'

Знаете ли вы, как я могу решить эту проблему?

1 Ответ

1 голос
/ 16 апреля 2020

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

Файл Hello.java:

@Deprecated
public class Hello {
  public static void main(String[] args) {}
}

Файл AttributeAnnotations.java:

import java.io.IOException;
import org.apache.bcel.classfile.AnnotationEntry;
import org.apache.bcel.classfile.Annotations;
import org.apache.bcel.classfile.Attribute;
import org.apache.bcel.classfile.ClassParser;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.generic.ClassGen;

public class AttributeAnnotations {

  public static void main(String[] args) throws IOException {

    JavaClass jclas = new ClassParser("Hello.class").parse();

    ClassGen cg = new ClassGen(jclas);

    Attribute[] attributes = cg.getAttributes();

    for (Attribute attribute : attributes) {
      System.out.println("attribute: " + attribute);
      if (attribute instanceof Annotations) {
        Annotations annotations = (Annotations) attribute;
        System.out.println("annotations: " + annotations);
        AnnotationEntry[] entries = annotations.getAnnotationEntries();
      }
    }
  }
}

Команды для запуска:

wget https://repo1.maven.org/maven2/org/apache/bcel/bcel/6.4.1/bcel-6.4.1.jar
javac Hello.java
javac -cp bcel-6.4.1.jar AttributeAnnotations.java
java -cp .:bcel-6.4.1.jar AttributeAnnotations

Все команды завершены без ошибок.

...