如何防止一个类中Java注释的多个实例

我有这样的Java注释类型:

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

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

@Retention(RUNTIME)
@Target(METHOD)
public @interface Foo {

}

我的意图是避免使用此注释的多个实例。换句话说,我要禁止下一个示例代码并引发异常:

public class FooTest {
   @Foo
   public void method1(){...}
   @Foo
   public void method2(){...}
}

有什么建议吗?

xxingx 回答:如何防止一个类中Java注释的多个实例

实现您的意图的最佳技术(避免使用此批注的多个实例)将是静态检查,仅因为它可以完成并且可以更早地发现问题。 Java的annotation processing feature支持此功能。

但是,由于该问题包含@Retention(RUNTIME)并提到了异常,因此该问题也显示了在运行时执行此操作的愿望。如果预先知道要检查的类列表,则可以使用反射轻松完成。。这是检查一个类的简单代码,因为该问题涉及检查单个类。

public static void checkClass(Class<?> clazz) {
    boolean used = false;
    for( Method method : clazz.getDeclaredMethods() ) {
        if( method.getAnnotation(Foo.class) != null ) {
            if( used ) { 
                throw new IllegalFooUseException(); 
            }
            else { used = true; }
        }
    }
}

检查整个项目将需要更多的工作,因为这需要收集项目中的所有类,isn't so simple

本文链接:https://www.f2er.com/3094609.html

大家都在问