Java注解

Demo1

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
@interface 定义一个注解

我们可以使用@interface定义我们自己的注解。

@Retention 定义被修饰注解的保留策略,是注解的注解,为元注解

@Retention(RetentionPolicy.SOURCE):被修饰的注解保留在源码级别,被编译器舍弃。
@Retention(RetentionPolicy.CLASS) :被修饰的注解保留在class file中,不会保留到VM运行时。
@Retention(RetentionPolicy.RUNTIME) :被修饰的注解保留在class file中,会保留到VM运行时,可以通过反射读取。

保留策略默认为{@code RetentionPolicy.CLASS}。

@Target 定义被修饰注解的使用位置(比如被修饰的注解只能修饰方法),是注解的注解,为元注解

该注解的种类比较多,这里只写最常用的。
@Target(ElementType.METHOD):被修饰的注解只能修饰方式。
@Target({ANNOTATION_TYPE}):被修饰的注解只能修饰注解。

Demo2

private static final int ACTION_STOP = 0;
private static final int ACTION_PAUSE = 1;
private static final int ACTION_PLAY = 2;

@IntDef(flag=true, value={ACTION_STOP, ACTION_PAUSE, ACTION_PLAY})
@Retention(RetentionPolicy.SOURCE)
public @interface Action {}

@Action int mCurAction = ACTION_STOP;

private void doAction(@Action int action) {...}
@IntDef 定义被修饰的注解为枚举,替代java.lang.Enum

java.lang.Enum比较耗内存,性能低(编译后变成抽象类,并且每个线程中都有一份拷贝),使用静态变量的方式定义常量又不能做类型检查。所以注解的方式就比较好了。
public void setAction(@Actions long action);
定义了注解Actions修饰的变量action只有ACTION_STOP, ACTION_PAUSE, ACTION_PLAY三个值。
这里的flag=true代表枚举值可以通过 | 或 & 的方式使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值