Java 1.5.0.12 и пользовательские аннотации во время выполнения - PullRequest
3 голосов
/ 17 января 2011

Я нахожусь в проекте, где мне нужно использовать вышеуказанную конкретную версию 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));
  }
}

1 Ответ

1 голос
/ 23 января 2011

Я наконец-то нашел, в чем была проблема: все нормально и работает. Единственная проблема, с которой я столкнулся, заключалась в том, что я использовал настройки java по умолчанию, принятые в моей компании, и они установили совместимость компиляторов и совместимость с исходными файлами на 1,5. Но совместимость файлов классов была установлена ​​на 1,2, и в этой версии не было никаких аннотаций. После включения конкретных настроек проекта и изменения совместимости файлов классов до 1,5 все работает нормально.

Спасибо за вашу помощь Markus

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...