注解(二)元注解的定义及其使用

元注解:jdk提供的注解,用来修饰自定义的注解

1.元注解之@Target

作用:指明此注解用在哪个位置,如果不写默认是任何地方都可以使用
@Target注解的属性:ElementType[]   value
      ElementType是一个枚举: 枚举名.变量名
            TYPE: 用在类,接口上
            FIELD:用在成员变量上
            METHOD: 用在方法上
            PARAMETER:用在参数上
            CONSTRUCTOR:用在构造方法上
            LOCAL_VARIABLE:用在局部变量上

2.元注解之@Retention

作用:定义该注解的生命周期(有效范围)。不写默认值CLASS(.java,.class)
@Retention注解的属性:RetentionPolicy   value
      RetentionPolicy是一个枚举:
            SOURCE:注解只存在于Java源代码中,编译生成的字节码文件(class文件)中就不存在了。
            CLASS:注解存在于Java源代码、编译以后的字节码文件中,运行的时候内存中没有,默认值。
            RUNTIME:注解存在于Java源代码中、编译以后的字节码文件中、运行时内存中,程序可以通过反射获取该注解。

定义元注解:

package com.ccc.demo07Annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD,ElementType.TYPE})//声明注解的使用位置:成员方法上,类/接口上
@Retention(RetentionPolicy.CLASS)
public @interface Book {
    
    //书名
    public abstract String value();
    
    //价格,默认值为 100
    public abstract double price() default 100;
    
    //多位作者
    public abstract String[] authors();
}

使用元注解:

package com.ccc.demo07Annotation;

@Book(value = "老王",authors = "老王")
public class UseBook {
    private String name;

    public UseBook(String name) {
        this.name = name;
    }

    @Book(value = "老王",authors = "老王")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45083975/article/details/91982062