Android 注解替代枚举
01.使用注解限定传入类型
使用注解限定传入类型
比如,尤其是写第三方开源库,对于有些暴露给开发者的方法,需要限定传入类型是有必要的。举个例子:
刚开始的代码
1
2
3
4
5
6
7
8
9/**
* 设置播放器类型,必须设置
* 注意:感谢某人建议,这里限定了传入值类型
* 输入值:111 或者 222
* @param playerType IjkPlayer or MediaPlayer.
*/
public void setPlayerType(int playerType) {
mPlayerType = playerType;
}优化后的代码,有效避免第一种方式开发者传入值错误
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22/**
* 设置播放器类型,必须设置
* 注意:感谢某人建议,这里限定了传入值类型
* 输入值:ConstantKeys.IjkPlayerType.TYPE_IJK 或者 ConstantKeys.IjkPlayerType.TYPE_NATIVE
* @param playerType IjkPlayer or MediaPlayer.
*/
public void setPlayerType(@ConstantKeys.PlayerType int playerType) {
mPlayerType = playerType;
}
/**
* 通过注解限定类型
* TYPE_IJK IjkPlayer,基于IjkPlayer封装播放器
* TYPE_NATIVE MediaPlayer,基于原生自带的播放器控件
*/
@Retention(RetentionPolicy.SOURCE)
public @interface IjkPlayerType {
int TYPE_IJK = 111;
int TYPE_NATIVE = 222;
}
@IntDef({IjkPlayerType.TYPE_IJK,IjkPlayerType.TYPE_NATIVE})
public @interface PlayerType{}
02.使用注解替代枚举
使用注解替代枚举,代码如下所示
1
2
3
4
5
6
7@Retention(RetentionPolicy.SOURCE)
public @interface ViewStateType {
int HAVE_DATA = 1;
int EMPTY_DATA = 2;
int ERROR_DATA = 3;
int ERROR_NETWORK = 4;
}- 枚举代码
1
2
3
4
5
6public enum ViewStateType {
HAVE_DATA,
EMPTY_DATA,
ERROR_DATA,
ERROR_NETWORK,
}