Android使用Annotations注解优化代码

2023-05-16

文章目录

  • Android使用Annotations注解优化代码
    • Null 注解
    • Typedef 注解
    • Resource Type 注解
    • Threading 注解
    • Value Constraints 注解
    • Overriding Methods 注解
    • Return Values 注解
    • Keep 注解
    • Permissions 注解

Android使用Annotations注解优化代码

Null 注解

  • @Nullable注解用于标识参数或返回值可以为null。
  • @NonNull注解用于标识参数或返回值不能为null,否则IDE提示警告。
@Nullable
private String test1(@Nullable String param) {
    return null;
}

@NonNull
private String test2(@NonNull String param){
    return "abc";
}

Typedef 注解

枚举Enum在Java中是一个完整的类,相比常量整数消耗更多的内存,可以使用Typedef注解替代枚举。

  • @IntDef
  • @LongDef
  • @StringDef
final public class SexType {
    public static final int UNKNOWN = 0;
    public static final int BOY = 1;
    public static final int GIRL = 2;
}

@IntDef({UNKNOWN, BOY, GIRL})
@Retention(RetentionPolicy.SOURCE)
@interface Sex {
}
private void test(@Sex int sex) {
}

test(SexType.UNKNOWN);
test(1); //提示警告

Resource Type 注解

资源类型在Android中作为整型值来传递,这意味着在传递的过程中容易出错,且编译器很难区分,使用Resource Type 注解可以提供类型检查。

private void test(@StringRes int strRes) {
}

test(R.string.app_name);
test(123); //红线警报
  • @AnimatorRes:属性动画资源类型。
  • @AnimRes:动画资源类型。
  • @ArrayRes:数组资源类型。
  • @AttrRes:属性资源类型。
  • @BoolRes:布尔资源类型。
  • @ColorRes:颜色资源类型。
  • @DimenRes:尺寸资源类型。
  • @DrawableRes:图像资源类型。
  • @IdRes:id类型。
  • @IntegerRes:整数资源类型。
  • @LayoutRes:布局资源类型。
  • @RawRes:Raw资源类型。
  • @StringRes:字符串资源类型。
  • @StyleRes:样式资源类型。
  • @StyleableRes:样式资源类型。
  • @XmlRes:xml资源类型。
  • @AnyRes:任意资源类型。

Threading 注解

  • @UiThread:UI线程注解。
  • @MainThread:主线程注解。
  • @WorkerThread:子线程注解。
  • @BinderThread:绑定线程。

Value Constraints 注解

  • @IntRange:限制整数取值范围。
  • @FloatRange:限制小数取值范围。
  • @Size:限制集合数量。
private void test(@IntRange(from = 1, to = 100) int param) {
}

test(50);
test(0); //提示警报
test(200); //提示警报
private void test(@Size(min = 2, max = 4) String str) {
}

test("abc");
test("a"); //提示警报

Overriding Methods 注解

  • @CallSuper:表示重写该方法时,必须调用super
class Base{
    @CallSuper
    public void onCreate(){
    }
}

class Child extends Base{

    @Override
    public void onCreate() {
        //super.onCreate();
        /*
        被@CallSuper注解的方法,当删除super方法时会提示警报
         */
    }
}

Return Values 注解

  • @CheckResult注解表示期待返回值做处理。
@CheckResult
private String test() {
    return "hello world";
}

String ret = test();
test(); //提示警报

Keep 注解

  • 当Android开启代码混淆,会出现代码被混淆、删除没有用的代码,可以使用@Keep注解避免此情况。

Permissions 注解

  • 可以通过@RequiresPermission注解提示开发者需要指定的权限。

必须调用权限

@RequiresPermission(Manifest.permission.CALL_PHONE)
public void test() {

}

需要多个权限

@RequiresPermission(allOf = {
    Manifest.permission.CALL_PHONE,
    Manifest.permission.CAMERA
})
public void test() {

}

至少一个权限

@RequiresPermission(anyOf = {
    Manifest.permission.CALL_PHONE,
    Manifest.permission.CAMERA
})
public void test() {

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android使用Annotations注解优化代码 的相关文章

随机推荐

  • 高通挂载bp侧驱动bringup流程

    BP侧修改 1 添加供应商给的驱动 添加到vendor qcom non hlos ADSP VT 5 4 3 c1 adsp proc ssc drivers 2 添加编译 vendor qcom non hlos ADSP VT 5 4
  • Jetson Nano从零开始(2):硬件篇

    Jetson Nano从零开始 xff08 2 xff09 xff1a 硬件篇 摘要主要硬件 xff1a 步骤1 烧写系统镜像到TF卡2 开机 其他硬件信息电源供电方式连接树莓派相机的方式 其它硬件参考文章 xff1a 摘要 这一篇主要讲n
  • 使用RGBD相机实现YOLOv3目标识别并测距,获取物体三维坐标

    设备环境 xff1a Ubuntu18 04 43 ros melodic 相机 xff1a 乐视相机 xff08 乐视遗产 xff0c 和奥比中光的 Astra Pro 同方案 xff0c 便宜 xff09 1 首先要安装一部分依赖 su
  • [jetson浅试] yolov5+deepsort+Tensorrt C++部署(Xavier AGX)

    1 简介 xff1a 这学期刚开学的时候搞的 xff0c 空下来整理一些 xff08 以后还是应该养成边搞边写博客的好习惯 xff09 本文主要是对yolov5 deepsort tensorrt A c 43 43 implementat
  • 阿里2014年校园题目最后一题答案及证明

    该题目来自cdsn的一位网友 xff08 可见http blog csdn net thebestdavid article details 11975809 xff09 xff0c 具体内容如下 xff1a 在黑板上写下50个数字 xff
  • 编程——两种list的翻转方法

    对于题目相信大家都比较熟悉了 xff0c 下面就直接上代码了 xff0c 其中没有给出list的creat函数 xff0c 有兴趣的同学可以自己实现 1 模板node的定义 template lt class T gt class TNod
  • 数组旋转新方法

    题目 xff1a 对一个int数组进行左右任意长度的旋转 xff0c 如 xff1a 原始数组为 1 2 3 4 5 xff0c 左旋两位 xff08 可用 2表示 xff09 得 3 4 5 1 2 xff0c 右旋两位 xff08 可用
  • 为什么链表操作过程中对于结构体指针,都要用malloc来开辟内存空间

    sqlist h ifndef SQLIST H define SQLIST H include lt stdio h gt include lt stdlib h gt define maxsize 1024 线性表的最大长度 typed
  • P1706 全排列问题

    原题 P1706 全排列问题 这题显然可以暴力 长达164行 include lt iostream gt include lt istream gt include lt ostream gt include lt cstdio gt i
  • 自动化专业考研方向简介

    自动化专业考研方向简介 xff08 一 xff09 大家在准备考研时 xff0c 想没想过 自己对什么感兴趣 xff1f 自己以后想干什么 xff1f 毕业后如何打算 xff1f 如果你认真考虑了这几个问题 xff0c 相信你的未来研究生生
  • UVA1185 Big Number

    原题 https www luogu com cn problem UVA1185 本题用到的定理的证明 https www cnblogs com weiliuyby p 5831991 html 题目 给出n 求n 的位数 从网上找到了
  • 浅谈威佐夫博弈

    如果不了解威佐夫博弈的话 xff0c 下面有威佐夫博弈的介绍 有两堆石子 xff0c 数量任意 xff0c 可以不同 游戏开始由两个人轮流取石子 游戏规定 xff0c 每次有两种不同的取法 xff0c 一是可以在任意的一堆中取走任意多的石子
  • YBT1325:循环比赛日程表

    我们先看题 我们仔细观察就会发现一下规律 xff1a 设一个数 设两个数 且 1 在的范围内 有 2 在的范围内 有 3 在的范围内 有 以上三条我都验证过了 正确 所以代码就出来了 include lt iostream gt using
  • Codeforces Contest #1553 A : Digit Sum 题解

    题目链接 Digit Sum 题面 将上面一大坨翻译一下 xff0c 就是 xff1a 定义函数的数字和 给出 求有多少个满足且 若模余 xff0c 则成立 一开始想是输出的下取整 xff0c 最后的结果 xff1a 没有考虑到的情况 xf
  • Atcoder Beginner Contest 100 - 题解

    A 原题 Happy Birthday 本题其实很水 只需要输入这两个整数 xff0c 如果中有一个大于 就输出 xff0c 否则输出 Yay include lt bits stdc 43 43 h gt using namespace
  • ubuntu 18.04 server 扩容(LVM)磁盘 解决磁盘不足的情况 (亲测)

    因为发现我的本地server出现磁盘满了的情况 所以进行lvm的扩容 截图的都是扩容后的 所以忽略容量 1 查看磁盘情况 df span class hljs attribute h span 原本发现 dev mapper ubuntu
  • 欢迎使用CSDN-markdown编辑器

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 xff0c 用它写博客 xff0c 将会带来全新的体验哦 xff1a Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传
  • 工作一年,辞职复习半年,考杭电计算机的经验分享

    工作一年 xff0c 辞职复习半年 xff0c 考杭电计算机的经验分享 如果 xff0c 毕业了工作顺利的人大概率是不会去考研的 xff0c 去考研的人 xff0c 大概率是想改变的 题记 2019 4 6 关于我 纠结的人生 为什么考研
  • CSS表格样式

    文章目录 CSS表格样式caption side 标题位置border collapse 边框合并border spacing 边框间距css样式 xff08 推荐使用 xff09 CSS表格样式 caption side 标题位置 语法
  • Android使用Annotations注解优化代码

    文章目录 Android使用Annotations注解优化代码Null 注解Typedef 注解Resource Type 注解Threading 注解Value Constraints 注解Overriding Methods 注解Ret