1

java中的@interface注解。

如果我添加@Target(value=ElementType.METHOD),这个注解可以导入Java 方法。

有没有办法让这个注解自动检查 Java 方法参数类型?

像,我有一个方法:

    @Annotation(type=Integer)
    sayHello(String name)

一旦我添加了客户注释,它会自动检查 sayHello 参数类型是否匹配,如果不匹配,则会导致编译错误。

是否可以实施?如果,怎么做?排除在运行时使用 java Reflect 来检查的想法,这不符合我的想法。

提前致谢。

4

1 回答 1

2

您需要 (1) 制作自己的注解处理器,其 API 由JDK提供,javax.annotation.processing并在编译期间调用它们并进行必要的检查。javax.lang.model(2) 使用 SPI 附加它

(1) 例如,给定注解

package aptest;    
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.SOURCE)
public @interface Annotation {
    Class<?> type();
}

注释处理器可能如下所示:

package aptest;
// ... imports
@SupportedAnnotationTypes({"aptest.Annotation"})
public class AnnotationProcessor extends AbstractProcessor 
    implements Processor {

    @Override
    public boolean process(Set<? extends TypeElement> annotations,
            RoundEnvironment roundEnv) {        
        for (TypeElement te : annotations) {
              for (Element e : roundEnv.getElementsAnnotatedWith(te)) {
                  // do your checking
              }
        }
        return true;
    }

}

(2) 当你打包你的注解处理器时(比如在 aptest.jar 中),你包含META-INF/services/javax.annotation.processing.Processor包含注解处理器类名称的文件:

aptest.AnnotationProcessor

当您编译代码时,注释处理器将被调用。要使用它,命令行应该是这样的:

javac -cp aptest.jar SayHello.java
于 2013-10-14T10:56:37.600 回答