Java 1.5.0.12和运行时的自定义注释

时间:2011-01-17 14:55:03

标签: java annotations runtime

我正处于一个需要使用上述特定JAVA版本的项目中。我不想使用自定义注释,并使用反射在RUNTIME中查询它的存在。所以我写了一个注释,一个要注释的类和一个测试类。问题是,注释不存在。当我使用其中一个内置的Annotations时,一切都很好,注释就在那里。当我在JAVA 1.6下尝试我的代码时,一切都很好......

此java版本中是否存在已知错误,还是需要添加更多内容?

BR 马库斯

代码:

// 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 个答案:

答案 0 :(得分:1)

我终于找到了问题所在:一切都很好并且有效。我遇到的一个问题是,我使用了我公司的默认java设置,并将编译器合规性和源文件兼容性设置为1.5。但是类文件兼容性设置为1.2,并且此版本中没有注释。 启用项目特定设置并将类文件兼容性更改为1.5后,一切正常。

感谢您的帮助 马库斯