专栏首页陈树义注解的那些事儿(三)| 注解的使用

注解的那些事儿(三)| 注解的使用

学会了如何定义自定义注解,那还要会用起来才行。

其实自定义注解使用也非常简单,像我们上篇文章定义的一个 Sweet 注解。

public @interface Sweet {
    String sweetLevel();
}

要使用它只需要像下面这样就可以了。

public class SweetDemo { 
    @Sweet (sweetLevel="Level.05")
    public void sweetWithDoc() {
        System.out.printf("sweet With Doc.");
    } 
}

但是有时候注解会有些特殊用法,我们需要了解一下。

第一种情况:如果没有任何注解属性,那么可以省略注解的中括号。

在上面的例子中,如果 @Sweet 注解没有任何属性。

public @interface Sweet {
}

那么我们使用的时候就可以直接写上直接名称,不需要中括号。

public class SweetDemo { 
    @Sweet
    public void sweetWithDoc() {
        System.out.printf("sweet With Doc.");
    } 
}

第二种情况:注解属性有默认值,可以不进行赋值操作。

在上面的 SweetDemo 中会发现我们在使用 @Sweet 注解的时候,手动给 sweetLevel 属性赋值。如果没有赋值,那么会报错。

但是如果在 @Sweet 注解声明的时候,给 sweetLevel 属性定义一个默认值,那么在使用的时候就不需要赋值操作了。

例如我们重新定义 Sweet,让你有一个「Level.03」的默认值。

public @interface Sweet {
    String sweetLevel();
}

那么在使用的时候就可以直接这样使用:

public class SweetDemo { 
    @Sweet
    public void sweetWithDoc() {
        System.out.printf("sweet With Doc.");
    } 
}

这个时候,sweetLevel 属性就是默认值:Level.03。

第三种情况:注解内有且仅有一个名字为 value 的属性时,应用这个注解时可以直接接属性值填写到括号内。

例如上面的 @Sweet 注解改写成这样:

public @interface Sweet {
    String value();
}

那么在使用的时候,我们本来应该这样用:

public class SweetDemo { 
    @Sweet(value = "Level.03")
    public void sweetWithDoc() {
        System.out.printf("sweet With Doc.");
    } 
}

但是我们可以忽略 value 属性名的声明,直接这么用:

public class SweetDemo { 
    @Sweet("Level.03")
    public void sweetWithDoc() {
        System.out.printf("sweet With Doc.");
    } 
}

总结

下面就来总结一下,其实自定义注解使用不复杂,但有下面三种情况比较特殊:

  • 注解没有任何注解属性,那么可以省略注解的中括号。
  • 注解的注解属性有默认值,可以不进行赋值操作。
  • 注解内有且仅有一个名字为 value 的属性时,应用这个注解时可以直接接属性值填写到括号内。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 玩转SSH(五):Struts + Spring + MyBatis(注解版)

    本文将在 玩转SSH(四):Struts + Spring + MyBatis 的基础上进行一些小的改动,将原本是 xml 配置方式的项目,改成注解的配置方式。...

    陈树义
  • 注解的那些事儿(二)| 如何自定义注解

    自定义注解是自己写框架的必备技能,使用注解能极大地提升开发效率,因此自定义注解是一个高级开发者必备的技能。

    陈树义
  • 集合系列 Set(六):HashSet

    HashSet 是 Set 集合的哈希实现,其继承了 AbstractSet 抽象类,并实现了 Set 接口。

    陈树义
  • mpvue网络接口请求封装

    在mpvue中我们同样使用小程序的原生API wx.request进行请求,具体方法如下:

    honey缘木鱼
  • android注解

    包 java.lang.annotation 中包含所有定义自定义注解所需用到的原注解和接口。 如接口 java.lang.annotation.Annot...

    提莫队长
  • NTP网络时钟的功能特点

    从某种层面上讲,网络时钟的稳定性和可靠性对整个系统安全稳定运行、精准维护及数据分析起着决定性作用。本文以常用的一款NTP网络时钟为例重点介绍其功能特点。

    时频专家
  • NTP网络时钟的功能特点

    从某种层面上讲,网络时钟的稳定性和可靠性对整个系统安全稳定运行、精准维护及数据分析起着决定性作用。本文以常用的一款NTP网络时钟为例重点介绍其功能特点。

    时频专家
  • SpaceX星链计划第七批卫星成功进入太空,今年年底将实现全球性服务

    当地时间4月22日12时30分,SpaceX的猎鹰9号火箭再次将60颗星链计划卫星送入太空,这也是该公司发射的第七批星链计划卫星。

    镁客网
  • tree组件在for循环中无法使用getCheckedNodes这个方法

    原理: 通过鼠标点击拿到选中的id,然后判断数组中存不存在这个id,有就删除,没有就添加这个id;

    用户4344670
  • 十种图像模糊算法的总结与实现

    作者:毛星云,腾讯 IEG 游戏开发工程师 后处理(Post-Processing),在图形学和游戏开发等领域是提升最终画面呈现品质的重要渲染技术。后处理渲染...

    腾讯技术工程官方号

扫码关注云+社区

领取腾讯云代金券