如果在接口中声明注释时将注释与方法相关联,我们是否可以强制在实现类中存在注释?

时间:2010-01-13 10:41:13

标签: java annotations

这是关于在Java中使用注释。我在一个方法中将一个注释与一个方法相关联,同时在界面中声明它。在实现时,如何确保注释与@Override注释一起使用,如果没有,它应该抛出编译错误?

感谢。

2 个答案:

答案 0 :(得分:1)

你不能在编译器中强制执行此操作,不。在查找给定类的注释时,使用这些注释检查所有超类和接口的工具是工作。

例如,Spring的AnnotationsUtils需要一个类来检查注释,并遍历其继承树寻找它们,因为编译器和JVM不会为你做这个。

答案 1 :(得分:1)

你不能。

您需要编写一些代码来执行此操作(在您的applciation加载时间或使用apt

我有相同的场景,并创建了我自己的注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface DependsOn {
    Class<? extends Annotation>[] value();

    /**
     * Specifies whether all dependencies are required (default),
     * or any one of them suffices
     */
    boolean all() default true;
}

并将其应用于其他注释,例如:

@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.TYPE)
@DependsOn(value={Override.class})
public @interface CustomAnnotation {
}

Imporant:请记住@Override有一个编译时(SOURCE)保留策略,即在运行时无法使用。