@Repeatable元注解的使用
阅读原文时间:2023年08月02日阅读:1

@Repeatable注解表明标记的注解可以多次应用于相同的声明或类型,此注解由Java SE 8版本引入。以下示例如何使用此注解:

第一步,先声明一个重复注解类:

package org.springmorning.demo.javabase.annotation.meta;

import java.lang.annotation.Repeatable;

/**
* @author 春晨
* @date 2019/1/14 20:25
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10279083.html
*/
@Repeatable(Schedules.class)
public @interface Schedule {
String dayOfMonth() default "first";
String dayOfWeek() default "Mon";
int hour() default 12;
}

第二步,再声明一个容器注解类:

package org.springmorning.demo.javabase.annotation.meta;

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

/**
* @author 春晨
* @date 2019/1/14 20:26
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10279083.html
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface Schedules {
Schedule[] value();
}

最后,创建一个测试类:

package org.springmorning.demo.javabase.annotation.meta;

import java.lang.reflect.Method;

/**
* @author 春晨
* @date 2019/1/14 20:27
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10279083.html
*/
@Schedule(dayOfMonth="last")
@Schedule(dayOfWeek="Wed", hour=24)
public class RepetableAnnotation{

@Schedule(dayOfMonth="last")  
@Schedule(dayOfWeek="Fri", hour=23)  
public void doPeriodicCleanup(){}

public static void main(String\[\] args) throws NoSuchMethodException {

    Method doPeriodicCleanup = RepetableAnnotation.class.getMethod("doPeriodicCleanup");

    Schedules schedules = doPeriodicCleanup.getAnnotation(Schedules.class);  
    System.out.println("获取标记方法上的重复注解:");  
    for (Schedule schedule: schedules.value()){  
        System.out.println(schedule);  
    }

    System.out.println("获取标记类上的重复注解:");  
    if (RepetableAnnotation.class.isAnnotationPresent(Schedules.class)){  
        schedules = RepetableAnnotation.class.getAnnotation(Schedules.class);  
        for (Schedule schedule: schedules.value()){  
            System.out.println(schedule);  
        }  
    }

}  

}

运行结果:

获取标记方法上的重复注解:
@org.springmorning.demo.javabase.annotation.meta.Schedule(hour=12, dayOfMonth=last, dayOfWeek=Mon)
@org.springmorning.demo.javabase.annotation.meta.Schedule(hour=23, dayOfMonth=first, dayOfWeek=Fri)
获取标记类上的重复注解:
@org.springmorning.demo.javabase.annotation.meta.Schedule(hour=12, dayOfMonth=last, dayOfWeek=Mon)
@org.springmorning.demo.javabase.annotation.meta.Schedule(hour=24, dayOfMonth=first, dayOfWeek=Wed)

下节继续

下节将给大家讲解预定义注解@Override的使用

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章