之前看到廖神的文章: Android 中的 Enum 到底占多少内存?该如何用?,写的非常好,建议大家都看看。
对于enum占用内存想必大家都知道,那么在Android里面什么时候用enum,什么时候用常量,可以参考这一篇文章:Should I strictly avoid using enums on Android?。
那么,对于一些常量,我们想保留类似于enum的约束性,有办法么?
答案是,有的。使用注解。
其实在Android源码中已经有这些使用的场景,比如View
的setVisibility()
方法:
1 |
|
将@Visibility
点进去看:
1 | ({VISIBLE, INVISIBLE, GONE}) |
可以看见,这里自定义了一个注解,并使用了@IntDef()
注解。@IntDef
是在android.support.annotation
这个jar包中的。下面用一个例子来具体说明使用方法:
在网络请求中,Http请求方法有好几种,”GET”, “POST”, “PUT”, “DELETE”等等,如果使用注解来代替常量的话,可以这么写:
在需要传入请求方法地方,就可以添加注解来限制:
1 | public RequestBuilder setMethod(@RequestMethod String requestMethod){ |
这时候,给setMethod()
穿参数时,就只能以RequestMethod.GET
这种方式,或者直接传入字符串GET
(这样编译会有警告,但可以通过)。
除了@StringDef
和@IntDef
以外,在android.support.annotation
包下还有很多其他的注解,比如@ColorRes
等等,更多其他用途等你来发现,哈哈。