美文网首页
Java的注解

Java的注解

作者: 一块自由的砖 | 来源:发表于2019-07-29 15:54 被阅读0次

    介绍

    注解(Annotation)是 JDK1.5 的新特性,是一种特殊的类,作用类似于注释,相当于是一个标记,可以标记在一个类身上的不同位置,可以修饰不同的成员变量、方法甚至是类。注解在实际开发中用的非常广泛,尤其是现在流行的基于注解式开发。

    定义

    注解通过 @interface 关键字进行定义。

    public @interface DemoAnnotation {
    }
    

    它的形式跟接口很类似,不过前面多了一个 @ 符号。上面的代码就创建了一个名字为 DemoAnnotation的注解。

    应用

    @DemoAnnotation
    public class Test {
    }
    

    创建一个类 Test,然后在类定义的地方加上 @DemoAnnotation 可以用 DemoAnnotation 注解这个类。

    属性

    注解的属性即成员变量。注解只有成员变量,没有方法。注解的成员变量在注解的定义中以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型。

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface DemoAnnotation {
        int id();
        String msg();
    }
    

    上面代码定义了 DemoAnnotation 这个注解中拥有 id 和 msg 两个属性。在使用的时候,应该给它们进行赋值。
    赋值的方式是在注解的括号内以 value=”” 形式,多个属性之前用 ,隔开。

    @DemoAnnotation(id=3,msg="hi annotation")
    public class Test {
    }
    

    需要注意的是,在注解中定义属性时它的类型必须是 8 种基本数据类型外加 类、接口、注解及它们的数组。注解中属性可以有默认值,默认值需要用 default 关键值指定。比如:

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface DemoAnnotation {
        public int id() default -1;
        public String msg() default "Hi";
    }
    

    DemoAnnotation 中:

    • id 属性默认值为 -1
    • msg 属性默认值为 Hi
      它可以这样应用。
    @DemoAnnotation()
    public class Test {}
    

    因为有默认值,所以无需要再在 @DemoAnnotation 后面的括号里面进行赋值了,这一步可以省略。另外,还有一种情况。如果一个注解内仅仅只有一个名字为 value 的属性时,应用这个注解时可以直接接属性值填写到括号内。

    public @interface DemoAnnotation {
        String value();
    }
    

    上面代码中,DemoAnnotation 这个注解只有 value 这个属性。所以可以这样应用。

    @DemoAnnotation("hi")
    

    这和下面的效果是一样的

    @DemoAnnotation(value="hi")
    

    最后,还需要注意的一种情况是一个注解没有任何属性。比如

    public @interface DemoAnnotation {}
    

    那么在应用这个注解的时候,括号都可以省略。

    @DemoAnnotation
    public void testMethod(){}
    

    分类

    注解可以分为四大类:

    • 元注解
    • 预置注解
    • 自定义注解
    • 第三方的注解(根据引入的三方包,查看对应的文档)

    相关文章

      网友评论

          本文标题:Java的注解

          本文链接:https://www.haomeiwen.com/subject/hdubrctx.html