全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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) 。 它指定了编译器在处理Animation时候的处理方法。 默认编译器会将常量替换成对应的数值,如果没指定该注解,你编译完成后将得到这样的class文件:


这样会导致IDE不能提示到有意义的信息。并且一定要指定为特定的int数值,否则也无法编译通过。


所以,应该指定Retention让编译器不对该注解做额外的优化处理。

二、DrawableRes, StringRes 与 DimenRes

当我们在编写指定资源文件的接口时,可以通过资源注解来指定该方法接受的资源类型。 指定错误的资源将不能编译通过。 下面代码中,我们使用@DrawableRes来表明setLogo方法只支持Drawable资源的ID。

public void setLogo(@DrawableRes int resurceId) {
 // do something
}

当我们提供错误的资源,IDE将会报错。


@StringRes @DimenRes 的使用方法也类似。

三、NonNull 与 Nullable

将一个空值传入一个方法中可能引发潜在的Crash。 我们应该极力避免这种情况, @NonNull 可以指定参数是否接受空值,当我们传入一个空值的时候,IDE会给出响应的警告。 我们可以这样使用它:

public void setContext(@NonNull Context context) {
 // do something
}

当我们对其传入一个空值的时候,将会显示警告(但代码仍然能通过编译)

@Nullable 用于修饰参数或者方法的返回值可能为空,提醒开发者主要空值检查。

@Nullable
public Context getContext() {return null;}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# android  # 封装sdk  # 注解  # android封装sdk包  # 配置Android SDK  # 关于Android Studio封装SDK的那些事儿  # Win8下Android SDK安装与环境变量配置教程  # 利用百度地图Android sdk高仿微信发送位置功能及遇到的问题  # centos7中安装Android SDK的方法步骤  # Android Studio设置或修改Android SDK路径方法  # 当我们  # 将会  # 我们可以  # 可以通过  # 可接受  # 自己的  # 的是  # 在这里  # 给你  # 你可以  # 有很多  # 还会  # 朋友们  # 对其  # 这种情况  # 几种  # 这篇文章  # 一说  # 后将  # 报错 


相关文章: 建站主机是否属于云主机类型?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  如何配置WinSCP新建站点的密钥验证步骤?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  制作证书网站有哪些,全国城建培训中心证书查询官网?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  如何通过虚拟主机空间快速建站?  Python路径拼接规范_跨平台处理说明【指导】  黑客如何通过漏洞一步步攻陷网站服务器?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  javascript基本数据类型及类型检测常用方法小结  微信小程序 五星评分(包括半颗星评分)实例代码  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  建站之星导航菜单设置与功能模块配置全攻略  建站DNS解析失败?如何正确配置域名服务器?  建站之星导航如何优化提升用户体验?  如何自定义建站之星网站的导航菜单样式?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  建站之星在线客服如何快速接入解答?  贸易公司网站制作流程,出口贸易网站设计怎么做?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  如何用wdcp快速搭建高效网站?  制作门户网站的参考文献在哪,小说网站怎么建立?  大连网站设计制作招聘信息,大连投诉网站有哪些?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  建站主机解析:虚拟主机配置与服务器选择指南  做企业网站制作流程,企业网站制作基本流程有哪些?  郑州企业网站制作公司,郑州招聘网站有哪些?  php json中文编码为null的解决办法  如何快速打造个性化非模板自助建站?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  建站之星客服服务时间及联系方式如何?  清除minerd进程的简单方法  大同网页,大同瑞慈医院官网?  建站之星如何实现五合一智能建站与营销推广?  如何通过老薛主机一键快速建站?  利用JavaScript实现拖拽改变元素大小  如何选择CMS系统实现快速建站与SEO优化?  如何快速搭建个人网站并优化SEO?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  黑客如何利用漏洞与弱口令入侵网站服务器?  建站ABC备案流程中有哪些关键注意事项?  建站之星上传入口如何快速找到?  制作网站怎么制作,*游戏网站怎么搭建?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  深圳网站制作案例,网页的相关名词有哪些?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  开封网站制作公司,网络用语开封是什么意思? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。