我正处于一个需要使用上述特定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));
}
}
答案 0 :(得分:1)
我终于找到了问题所在:一切都很好并且有效。我遇到的一个问题是,我使用了我公司的默认java设置,并将编译器合规性和源文件兼容性设置为1.5。但是类文件兼容性设置为1.2,并且此版本中没有注释。 启用项目特定设置并将类文件兼容性更改为1.5后,一切正常。
感谢您的帮助 马库斯