注解相关

通过注解限定参数类型

首先了解注解的概念。
注解:给程序中的元素(类,方法,字段)添加注释。
元注解:注解的注解称为元注解,来看下常见的元注解有

@Retention
指示注解内容要保留多久。默认为 RetentionPolicy.CLASS。
RetentionPolicy 是枚举类,定义了三种保留策略。

SOURCE
仅在源码阶段保留,编译时会丢弃注解。
CLASS
Class文件中,编译器将把注解记录在类文件中,但在运行时虚拟机 不需要保留注解。
RUNTIME
运行时,编译器将把注解记录在类文件中,在运行时虚拟机将保留注解,因此可以反射性地读取。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
/**
* 返回保留策略
*/
RetentionPolicy value();
}

@Target
注解目标类型,指示注解所适用的程序元素的类型。
常用的程序元素类型(ElementType)有:

TYPE
类、接口(包括注释类型)或枚举声明
FIELD
字段(包括枚举常量)
METHOD
方法
PARAMETER
参数
CONSTRUCTOR
构造方法
ANNOTATION_TYPE
注释类型
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
/**
* 返回可应用注解的元素类型的数组
*/
ElementType[] value();
}

当需要定义固定的几种状态值时,可以使用枚举或者注解,下面使用注解来表示加载数据的状态。

使用注解@IntDef限定其值必须为显式声明常量之一。

/**
* 通过注解限定类型
* LOADING 加载中
* CONTENT 加载完成,显示内容
* EMPTY 加载完成,数据为空
* ERROR 加载出错
*/
@IntDef(value = {StateType.LOADING, StateType.CONTENT, StateType.EMPTY, StateType.ERROR})
@Retention(RetentionPolicy.SOURCE)
public @interface StateType {
int LOADING = 1;
int CONTENT = 2;
int EMPTY = 3;
int ERROR = 4;
}

定义好值之后,就可以使用注解限定参数类型,这样可以避免传入限定以外的值。

private int state = StateType.CONTENT;
private void setState(@StateType int state) {
this.state = state;
}
————————————————
版权声明:本文为CSDN博主「JoeLittleStar」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhouxinxin250/article/details/98774293

原文地址:https://www.cnblogs.com/softidea/p/11792078.html