Я нахожусь в проекте, где мне нужно использовать вышеуказанную конкретную версию JAVA. И я не хочу использовать пользовательскую аннотацию и запрашивать ее присутствие во время RUNTIME, используя отражение. Поэтому я написал аннотацию, класс для аннотирования и тестовый класс. Проблема в том, что аннотации нет. Когда я использую одну из встроенных аннотаций, все в порядке, аннотация есть. Когда я пробую свой код под JAVA 1.6, все нормально ...
Есть ли известная ошибка в этой версии Java или мне нужно добавить что-то еще?
BR
Markus
Код:
// The annotation
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Retention(RUNTIME)
public @interface GreetsTheWorld {
public String value();
}
// The Annotated Class
@GreetsTheWorld("Hello, class!")
public class HelloWorld {
@GreetsTheWorld("Hello, field!")
public String greetingState;
@GreetsTheWorld("Hello, constructor!")
public HelloWorld() {
}
@GreetsTheWorld("Hello, method!")
public void sayHi() {
}
}
// The test
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class HelloWorldAnnotationTest {
public static void main( String[] args ) throws Exception {
//access the class annotation
Class<HelloWorld> clazz = HelloWorld.class;
System.out.println( clazz.getAnnotation( GreetsTheWorld.class ) );
//access the constructor annotation
Constructor<HelloWorld> constructor = clazz.getConstructor((Class[]) null);
System.out.println(constructor.getAnnotation(GreetsTheWorld.class));
//access the method annotation
Method method = clazz.getMethod( "sayHi" );
System.out.println(method.getAnnotation(GreetsTheWorld.class));
//access the field annotation
Field field = clazz.getField("greetingState");
System.out.println(field.getAnnotation(GreetsTheWorld.class));
}
}