java⽅法参数注解_Java学习使⽤注解将参数的值限定
前⾔
在Java的开发中,我们经常需要输⼊⼀些int或者String类型的值,⽽这些值可能仅仅⽤于代表状态或者类别。但是我们只希望这个参数的值输⼊0 到 5 这个范围的值,如果多输⼊⼤了我们的代码上并没有定义这些⼤于这些值的操作。 所以我们需要进⾏限制。 ⼀般情况下我们可以使⽤枚举enum。 但是,个⼈经常在折腾Android开发,⽽Android并不推荐使⽤enum,因为特别容易activity被持有导致内存泄漏。所以,我们只能参考⽤注解的⽅式限定⼀些值。
代码部分
⽅式1 :
⽐较推荐使⽤这个⽅式
⾸先创建⼀个接⼝设置⼀些常量,我们将限定只使⽤这个接⼝⾥的值:
public interfaceLevel {int LEVEL_V = 1;int LEVEL_D = 2;int LEVEL_I = 3;int LEVEL_W = 4;int LEVEL_E = 5;
}
然后创建注解类,使⽤@IntDef
//@Retention表⽰这个注解保留的范围,SOURCE=注解将被编译器编译的时候丢弃,不在代码运⾏时存在,这个注解只是希望IDE警告限定值的范围并不需要保留到VM或者运⾏时
@Retention(SOURCE)//@Target 这个注解需要使⽤的地⽅ PARAMETER=注解将被使⽤到⽅法的参数中
学习java的学习方法@Target({PARAMETER})//显式声明被定义的整数值,除了@IntDef还有@LongDef @StringDef等等
@IntDef(value ={Level.LEVEL_V, Level.LEVEL_D, Level.LEVEL_I, Level.LEVEL_W, Level.LEVEL_E})public @interfaceLogLevel {
}
然后使⽤我们创建的这个LogLevel注解
public void setLogLevel(@LogLevel intlevel){this.level =level;
}
然后我们看看效果,我们这⾥随便输⼊⼀个整数值,可以看到Android studio 已经警告了,告诉我们只能在下⾯的值中选择。
输⼊正确后就没有提⽰警告了。
⽅式2 :
这是⼀个更简单暴⼒的⽅式,直接在注解⾥写⼊常量,因为注解类本⾝其实也是⼀个接⼝。然后声明⾃⼰的常量
@Retention(SOURCE)
@Target({PARAMETER})
@IntDef(value={LogLevel.LEVEL_V, LogLevel.LEVEL_D, LogLevel.LEVEL_I, LogLevel.LEVEL_W, LogLevel.LEVEL_E})public
@interfaceLogLevel {int LEVEL_V = 1;int LEVEL_D = 2;int LEVEL_I = 3;int LEVEL_W = 4;int LEVEL_E = 5;
}
end
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论