JAVA自定义注解

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 常见的@Override和@Deprecated都是注解,注解可以加在类、方法、成员变量等上面。

public @interface 注解名{} 看起来和定义接口很相似只是多了一个@符号 接口: public interface 接口名注解: public @interface 注解名

public @interface test {
    
}

现在我们注解已经定义好了,使用的时候直接“@注解名”就可以使用了 比如下面我们可以定义在“类、成员变量、成员方法”上:

@telt
public class Test {


    @test
    private int num;
    
    @test
    public static void main(String[] args) {
        System.out.println("hello");
    }
}

元注解通俗的来说就是定义在注解上的注解,在Java中有四个元注解 @Target @Retention @Documented @Inherited

@Target就是用于描述注解的定义范围,可以限制这个注解定义的元素类型。

参数作用
ElementType.ANNOTATION_TYPE可以应用于注解类型
ElementType.CONSTRUCTOR可以应用于构造函数
ElementType.FIELD可以应用于字段或属性
ElementType.LOCAL_VARIABLE可以应用于局部变量
ElementType.METHOD可以应用于方法级注解
ElementType.PACKAGE可以应用于包声明
ElementType.PARAMETER可以应用于方法的参数
ElementType.TYPE可以应用于类的任何元素
@Target就是用于描述注解的定义范围,可以限制这个注解定义的元素类型。
@Target(ElementType.FIELD)
public @interface test {

}

@Retention是用于定义注解的生命周期

参数作用
RetentionPolicy.SOURCE标记的注解仅保留在源级别中,并被编译器忽略
RetentionPolicy.CLASS标记的注解在编译时由编译器保留,但 Java 虚拟机(JVM)会忽略
RetentionPolicy.RUNTIME标记的注解由 JVM 保留,因此运行时环境可以使用它
@Retention是用于定义注解的生命周期

注解里还可以定义参数:

@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface test {
    String type() default "1"; //可以使用default定义默认的值
    int id();
}

调用方法如下:

public class Test {

    //type有默认值,也可以不写
    @lkx(type = "2",id = 1)
    private int num;
    
   
}

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注