前言

在工作中我们经常需要将功能模块封装成库供合作厂商调用, 如何写好一个健壮的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小时内与您取得联系。