使用特定注释来编译具有特定参数/签名的方法

时间:2015-06-12 08:07:30

标签: java annotations

我有一个注释:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String annotationArgument1() default "";
    String annotationArgument2();
}

我有两个班:

class MyClass1 {
    @MyAnnotation(annotationArgument1="ABC", annotationArgument2="XYZ")
    public void method1(MyClass2 object) {
        //do something
    }

    @MyAnnotation(annotationArgument1="MNO", annotationArgument2="PQR")
    public void method2(MyClass2 object) {
        //do something
    }
}

class MyClass2 {
    int num;
}

我希望method1method2(或使用@MyAnnotation注释的任何其他类中的任何其他方法)只将一个参数作为MyClass2,因为它们带有{注释{1}}。如果传递了其他参数,则必须给出编译时错误。

实际上可以这样做吗? 如果是的话,怎么做呢?如果不是,那么这种行为可以替代什么呢?

1 个答案:

答案 0 :(得分:2)

AFAIK,您可以使用annotation processor在编译时检查方法签名。

我建议:

  • AbstractProcessor视为基类
  • 考虑使用javax.annotation.processing包提供的注释
  • 在META-INF / services
  • 中将处理器注册为service
  • 将注释处理器和注释打包在同一个jar中 - 连同注册即服务一样,只要您使用自定义注释处理器,就会启用处理器