这里有新鲜出炉的精品教程,程序狗速度看过来!
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
这篇文章主要给大家总结了在 Android 中封装 SDK 时常用的注解的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
前言
在工作中我们经常需要将功能模块封装成库供合作厂商调用, 如何写好一个健壮的 Android Library 有很多讲究,使用注解可以对 SDK 暴露给开发者的接口做出一些限制,从而尽可能地避免开发者错误地使用 API。 下面我们介绍几种封装 SDK 时常用到的注解,需要的朋友们可以参考学习。
一、IntDef 与 StringDef
我们有时候会使用 int 常量或者 String 常量来代替枚举, 特别在你编写 SDK 的时候,你可以通过 IntDef 或者 StringDef 来限制接口可接受的参数。
比如,有一个
的接口,用来关闭指定的
- disableChannel
。 我们可以先定义自己的注解
- channel
- @RequirePayChannel
- public static final int CHANNEL_UNIONPAY = 0x11000;
- public static final int CHANNEL_ALIPAY = 0x12000;
- public static final int CHANNEL_WECHAT = 0x13000;@Retention(RetentionPolicy.SOURCE)@IntDef({
- CHANNEL_UNIONPAY,
- CHANNEL_ALIPAY,
- CHANNEL_WECHAT
- }) public@interface RequirePayChannel {}
这样,你便可以通过
来指定
- @RequirePayChannel
的可接受参数
- disableChannel()
- public void enableChannel(@RequirePayChannel int channel) {
- // do something
- }
这样,一些 IDE 还会自动提供给你建议参数。如果填入指点范围之外的参数,将会出现错误提示并无法编译通过。
值得一说的是, 在这里,我们使用到了
。 它指定了编译器在处理
- @Retention(RetentionPolicy.SOURCE)
时候的处理方法。 默认编译器会将常量替换成对应的数值,如果没指定该注解,你编译完成后将得到这样的 class 文件:
- Animation
这样会导致 IDE 不能提示到有意义的信息。并且一定要指定为特定的 int 数值,否则也无法编译通过。
所以,应该指定
让编译器不对该注解做额外的优化处理。
- Retention
二、DrawableRes, StringRes 与 DimenRes
当我们在编写指定资源文件的接口时,可以通过资源注解来指定该方法接受的资源类型。 指定错误的资源将不能编译通过。 下面代码中,我们使用
来表明
- @DrawableRes
方法只支持
- setLogo
资源的 ID。
- Drawable
- public void setLogo(@DrawableRes int resurceId) {
- // do something
- }
当我们提供错误的资源,IDE 将会报错。
与
- @StringRes
的使用方法也类似。
- @DimenRes
三、NonNull 与 Nullable
将一个空值传入一个方法中可能引发潜在的
。 我们应该极力避免这种情况,
- Crash
可以指定参数是否接受空值,当我们传入一个空值的时候,IDE 会给出响应的警告。 我们可以这样使用它:
- @NonNull
- public void setContext(@NonNull Context context) {
- // do something
- }
当我们对其传入一个空值的时候,将会显示警告(但代码仍然能通过编译)
用于修饰参数或者方法的返回值可能为空,提醒开发者主要空值检查。
- @Nullable
- @Nullable public Context getContext() {
- return null;
- }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对 PHPERZ 的支持。
来源: http://www.phperz.com/article/17/0609/334646.html