Почему аннотация не сохраняется в файле класса

Если это определить следующую аннотацию:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnot {
    public String value();
}

И затем используйте его, определяя следующий интерфейс:

@MyAnnot("somevalue")
public interface MyClass
{
}

Если я тогда запускаю следующие команды:

javac MyClass.java

javap MyClass.class

Тогда мой вывод:

Скомпилировано из "MyClass.java"

открытый интерфейс MyClass { }

Так что мне кажется, что аннотация не сохраняется? Если это так, то почему это так?

2 ответа

Решение

Использовать -v/-verbose возможность распечатать дополнительную информацию

> javap -c -v MyClass.class 

[...]

SourceFile: "MyClass.java"
RuntimeVisibleAnnotations:
  0: #24(#25=s#26)
    org.example.MyAnnot(
      value="somevalue"
    )

Если вы увидите следующее, вы заметите, что на самом деле аннотация сохраняется. Просто javap не показывает его в стандартном выводе. Использование опции -v для многословия действительно показывает это:

C:\Development\stack>javap -v MyClass.class
Classfile /C:/Development/stack/MyClass.class
  Last modified 12-Sep-2018; size 172 bytes
  MD5 checksum 9ca4a6c712dadb0bedeede816c57c1b4
  Compiled from "MyClass.java"
public interface MyClass
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_INTERFACE, ACC_ABSTRACT
Constant pool:
   #1 = Class              #9             // MyClass
   #2 = Class              #10            // java/lang/Object
   #3 = Utf8               SourceFile
   #4 = Utf8               MyClass.java
   #5 = Utf8               RuntimeVisibleAnnotations
   #6 = Utf8               LMyAnnot;
   #7 = Utf8               value
   #8 = Utf8               somevalue
   #9 = Utf8               MyClass
  #10 = Utf8               java/lang/Object
{
}
SourceFile: "MyClass.java"
RuntimeVisibleAnnotations:
  0: #6(#7=s#8)
Другие вопросы по тегам