java 中自定义注解的注意事项

51 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

自定义注解的时候的注意事项。

其实,在自定义注解的时候,最容易混淆的就是自定义注解中的字段的定义。这里我们来举个例子:

@Documented
@Target(ElementType.ANNOTATION_TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface CarAnnotationExample { 
    public String brand(); 
    int price(); 
}

在上面的例子中,我们设置了两个参数,一个是brand,一个是price。其实注解的定义在格式、结构上看,很像java 中方法的定义。在定义的时候,我们可以看到其中和参数相关的内容:brand/price 相关的,却是一种很像接口中的“方法”的定义。

这就是我们最需要注意的地方了。其中类似这种public String brand(); 定义,在注解中,其实是“参数”的定义。

换句话说,我们需要注意:注解里面的内容不是方法,是“注解类型参数”。

另外要说明的是,在我们定义注解中的参数的时候,注解类型参数后面的括号里面是没有“参数”的,那个括号就只是一个注解定义的时候的特殊的语法,我们不必深究。

在定义的参数后面,如果想设置默认值,那么在参数的括号后面可以加上default 关键字,举例如:

public String brand() default "apple";

如果定义的参数没有设置默认值的话,那么在使用注解的时候,必须要给这个参数赋值。

注解的定义还为我们提供了另外一个便利,那就是当在注解的定义中只有一个参数的时候,在使用这个注解的时候,我们就不需要加上参数名了,因为注解可以对这个唯一的参数进行自动匹配。

在定义注解的时候,它的参数的访问修饰符可以写,也可以不写。如果写,那么必须是public;如果不写,那么默认就是public 类型的。所以我们也不要自找麻烦了,直接不写就好了。

如果一个自定义注解的元注解@Target 的参数值为Element.PACKAGE,那么这个注解是不能直接写在某个类上面的package 路径代码上的,而是应该统一将配置写在package-info.java 文件中。

总结

这篇文章介绍了自定义注解的一些注意事项,这些内容很重要,要记住。