IntDef 和 StringDef 的使用

11 篇文章 0 订阅

IntDef 和 StringDef 的使用

在 androidx.annotation 中提供了 IntDef 和 StringDef 两个元注解供使用。

在如下的应用场景中可以进行使用:需要传入的参数是几个固定值(整形、字符串)中的某一个时,可以使用这两个注解来帮助你在编译时判断参数是否传错。如果不使用注解,常见的做法是使用枚举类。

例如有一个设置星期的函数

private void setCurrentDay(int day) {
    currentDay = day;
}

配套一个枚举类来进行使用。

private enum Day {
    MONDAY(1), TUESDAY(2);
    private int day;
    private Day(int day) {
        this.day = day;
    }
    public int getDay() {
        return day;
    }
}

然后调用 setCurrentDay 方法

setCurrentDay(Day.MONDAY.getDay());

IntDef 的使用

IntDef 表示带注释的整数类型的元素表示逻辑类型,并且其值应为明确命名的常量之一。先预设几个常量:

private static final int MONDAY = 1;
private static final int TUESDAY = 2;

然后手写自己的注解,作用在 PARAMETER 和 FIELD 上。

@IntDef({MONDAY, TUESDAY})
@Target({ElementType.PARAMETER, ElementType.FIELD})
@interface MyDay {
}

然后用自己写的注释去修饰需要使用的变量和函数

@MyDay
private int currentDay;

private void setCurrentDay(@MyDay int day) {
    currentDay = day;
}

最后在调用 setCurrentDay 方法时,传入的参数会被自动限定为 MONDAY 或者 TUESDAY,其他的 int 型数字比如 1 会被 IDE 标记(但是不报错)。

private void test() {
    setCurrentDay(MONDAY);
    setCurrentDay(1);       //被标记
}

StringDef 的使用

和 IntDef 类似,这里直接给出相关的代码,不再做具体说明

private static final String JANUARY = "January";
private static final String FEBRUARY = "February";

@StringDef({JANUARY, FEBRUARY})
@Target({ElementType.PARAMETER, ElementType.FIELD})
@interface MyMonth {
}

private void setCurrentMonth(@MyMonth String month) {
    currentMonth = month;
}

private void test() {
    setCurrentMonth(JANUARY);
    setCurrentMonth("JANUARY");     //会被标记
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值