android 注解参数值,浅谈Android中@IntDef注解的使用

上回书说到Android中推荐使用@IntDef代替枚举类型。 那么今天的主题就是来浅浅的了解一下@IntDef注解的使用。

在build.gradle 文件中添加依赖

implementation 'com.android.support:support-annotations:26.1.0'

定义自己的@IntDef注解类型

@IntDef ({

LEFT_UP, LEFT_DOWN,

RIGHT_UP, RIGHT_DOWN,

UP, DOWN

})

@Retention(RetentionPolicy.CLASS)

public @interface RenderPosition {

int LEFT_UP = 0;

int LEFT_DOWN = 1;

int RIGHT_UP = 2;

int RIGHT_DOWN = 3;

int UP = 4;

int DOWN = 5;

}

@IntDef限定了 RenderPosition类型的值范围。

@Retention(RetentionPolicy.CLASS) 为元注解,什么是元注解呢?

元注解就是用来注解注解类型的注解:)

理解了这句话,就理解了注解类型,哈哈。

JDK中提供了如下几种常用的元注解:

@Documented

表示含有该注解类型的元素(带有注释的)会通过javadoc或类似工具进行文档化

@Inherited

表示注解类型能被自动继承

@Retention

表示注解类型的存活时长

@Target

表示注解类型所适用的程序元素的种类

@Repeatable

使被修饰的注解可以重复的注解某一个程序元素

如果你对注解类型还不了解或者对这些元注解的用法不了解的话,可以参考这篇秒懂:

秒懂JAVA注解类型

在定义了自己的IntDef注解类型后,你就可以用它来修饰方法参数、方法返回值

就像下面这样:

@RenderPosition

private int calculateRenderPosition(Rect faceRect) {

....

return RenderPosition.UP;

}

也可以作为switch-case的变量类型,像这样:

private Rect calculateBackgroundRect(Rect faceRect) {

@RenderPosition int renderPostion = calculateRenderPosition(faceRect);

Rect backgroundRect = new Rect();

switch (renderPostion) {

case RenderPosition.UP:

...

break;

case RenderPosition.DOWN:

...

break;

case RenderPosition.LEFT_UP:

...

break;

case RenderPosition.RIGHT_UP:

...

break;

case RenderPosition.LEFT_DOWN:

...

break;

case RenderPosition.RIGHT_DOWN:

...

break;

}

return backgroundRect;

}

同理,我们也可以使用@StringDef

这样就完成了,既不用枚举,也实现了编译期的类型检查,同时还避免了只定义静态常量带来的语义模糊的问题。

是不是很棒?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值