注解的定义及使用

注解的定义及使用:

(1)先自定义一些注解,学会定义注解:

测试代码:

package annotationtest;

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

public @interface MyAnnotation {
    // 定义注解属性,看起来像个方法,实际上是注解的name属性
    String name();

    // 再定义一个int型属性
    int id();

    // 还可以给属性加默认值,这个属性用的时候可以不赋值,也可以不写,会自动赋默认值
    int age() default 18;

}

@interface MyAnnotation02 {
    // 当注解中只有一个属性时,并且属性名定义为value时
    // 用的时候,属性名可以省略不写
    int value();
}

// 如果希望这个注解只能标注类和方法,使用Target元注解
@Target(value = {ElementType.TYPE, ElementType.METHOD})

// 如果你希望这个注解保存在class文件中,且能被反射机制读取,使用Retention
@Retention(value = RetentionPolicy.RUNTIME)

@interface MyAnnotation03 {
    int[] nums();
    String[] strs();
    Season[] seasons();
}

(2)再来看一下注解怎么使用:

package annotationtest;

public class Test01 {
    public static void main(String[] args) {
        System.out.println(111);
    }

    @Override
    public String toString() {
        return "Test01{}";
    }


    // @MyAnnotation
    public void m1() {
        /*
            不能用的原因:因为@MyAnnotation注解中有属性值name
            用的时候必须给name赋值
         */
    }

    // 那怎么赋值?这样赋值
    @MyAnnotation(name = "张三", id = 1, age = 18)
    public void m2() {

    }

    // 也可以不赋默认值
    @MyAnnotation(name = "李四", id = 2)
    public void m3() {

    }

    // 只有一个属性,且属性名为value的时候可以省略不写属性名
    @MyAnnotation02(2)
    public void m4() {

    }

    // 当数组元素个数为1个时,数组的大括号可以省略不写
    @MyAnnotation03(nums = 1, strs = "hello", seasons = Season.AUTUMN)
    public void m5() {

    }

    // 当数组元素个数不止1个时,数组的大括号就要写了
    @MyAnnotation03(nums = {1, 2}, strs = "hello", seasons = {Season.AUTUMN, Season.SPRING})
    public void m6() {

    }

}

enum Season {
    SPRING, SUMMER, AUTUMN, WINTER
}

猜你喜欢

转载自blog.csdn.net/pipizhen_/article/details/107611371