Android Toast 中的传参限制

本文解析了Android Toast消息提示的持续时间如何通过注解实现限制,介绍了@IntDef注解的作用及使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android Toastduration(int)传参只能是Taost.LENGTH_SHORTTaost.LENGTH_LONG,这个是怎么实现的呢?

查看源码

    public static final int LENGTH_SHORT = 0;
    public static final int LENGTH_LONG = 1;

    @IntDef({LENGTH_SHORT, LENGTH_LONG})
    @Retention(RetentionPolicy.SOURCE)
    public @interface Duration {}

    public static Toast makeText(Context context, CharSequence text, @Duration int duration) {
        return makeText(context, null, text, duration);
    }

duration 的参数前面有个注解@Duration而这个@Duration中又有个注解@Intdef

@Retention(SOURCE)
@Target({ANNOTATION_TYPE})
public @interface IntDef {
    /** Defines the allowed constants for this element */
    long[] value() default {};

    /** Defines whether the constants can be used as a flag, or just as an enum (the default) */
    boolean flag() default false;
}

@Intdefandroid.support.annotation包下的一个注解,@Target({ANNOTATION_TYPE})表明它只能用来修饰注解.android.support.annotation包下有很多预定义的注解可以使用,能够帮你检查代码,比如@MainThread,`@IntRange” 等.

如果你写了个方法,并且只想让调用者传入固定的几个值,那么就可以参照Toast中的写法.
1,把值定义成常量
2,写一个注解,用@Indef引用你写的那几个常量
3,用刚写的注解修饰你需要限定的传参
eg:

    //参照 Taost      

如果你只是想限制一个取值范围,比如(0~100)那么你可以用@IntRange(from 0,to 100)那么调用者就不能够传参这个范围以外的值
eg:

    public static void input(@IntRange(from 0,to 100) int i){
        //do something
    }

这些注解只会保留到源码级别,不会对运行时造成影响.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值