Rhythmk 一步一步学 JAVA (19): 注解 annotation

在编写注解的时候需要了解的四种注解:

@Target

      表示该注解可以用于什么地方,可能的ElementType参数有: 

CONSTRUCTOR构造器的声明

FIELD:域声明(包括enum实例)

LOCAL_VARIABLE:局部变量声明

METHOD:方法声明

PACKAGE:包声明

PARAMETER:参数声明

TYPE:类、接口(包括注解类型)或enum声

@Retention

     表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:

SOURCE:注解将被编译器丢弃

CLASS:注解在class文件中可用,但会被VM丢弃

RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。

@Document

    将注解包含在Javadoc中

@Inherited

    允许子类继承父类中的注解

 

定义一个注解:

package com.rhythmk.annotation;

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

@Target(value = ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface RService {

    String[] value() default "working";

    RunEnum Run();
}

注解使用:

@RService(value={"v1","v2"},Run=RunEnum.Run)
public interface UserService {
  
     String  findUserById(int id);
     
     String saveUser(String userName);
}

 

通过isAnnotationPresent 判断该类是否存在某注解:

        Class<?> usCls = UserService.class;
        // 判断改类是否使用了该注解
        boolean isAnnotationRService = usCls
                .isAnnotationPresent(RService.class);

获取该类注解配置的数值:

    RService rService = UserService.class.getAnnotation(RService.class);
        for (String v : rService.value()) {
            System.out.println("注解Value:" + v);
        }

        System.out.println("枚举:" + rService.Run());

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。