美文网首页
浅谈Android中@IntDef注解的使用

浅谈Android中@IntDef注解的使用

作者: 汪和呆喵 | 来源:发表于2018-12-21 22:40 被阅读0次

上回书说到Android中推荐使用@IntDef代替枚举类型。 那么今天的主题就是来浅浅的了解一下@IntDef注解的使用。

在build.gradle 文件中添加依赖
implementation 'com.android.support:support-annotations:26.1.0'

定义自己的@IntDef注解类型

@IntDef ({
        LEFT_UP, LEFT_DOWN,
        RIGHT_UP, RIGHT_DOWN,
        UP, DOWN
})
@Retention(RetentionPolicy.CLASS)
public @interface RenderPosition {
    int LEFT_UP = 0;
    int LEFT_DOWN = 1;
    int RIGHT_UP = 2;
    int RIGHT_DOWN = 3;
    int UP = 4;
    int DOWN = 5;
}

@IntDef限定了 RenderPosition类型的值范围。
@Retention(RetentionPolicy.CLASS) 为元注解,什么是元注解呢?
元注解就是用来注解注解类型的注解:)
理解了这句话,就理解了注解类型,哈哈。

JDK中提供了如下几种常用的元注解

  • @Documented
    表示含有该注解类型的元素(带有注释的)会通过javadoc或类似工具进行文档化
  • @Inherited
    表示注解类型能被自动继承
  • @Retention
    表示注解类型的存活时长
  • @Target
    表示注解类型所适用的程序元素的种类
  • @Repeatable
    使被修饰的注解可以重复的注解某一个程序元素

如果你对注解类型还不了解或者对这些元注解的用法不了解的话,可以参考这篇秒懂:
秒懂JAVA注解类型

在定义了自己的IntDef注解类型后,你就可以用它来修饰方法参数、方法返回值
就像下面这样:

        @RenderPosition
        private int calculateRenderPosition(Rect faceRect) {
            ....
            return RenderPosition.UP;
        }

也可以作为switch-case的变量类型,像这样:

        private Rect calculateBackgroundRect(Rect faceRect) {
            @RenderPosition int renderPostion = calculateRenderPosition(faceRect);
            Rect backgroundRect = new Rect();
            switch (renderPostion) {
                case RenderPosition.UP:
                    ...
                    break;
                case RenderPosition.DOWN:
                    ...
                    break;
                case RenderPosition.LEFT_UP:
                    ...
                    break;
                case RenderPosition.RIGHT_UP:
                    ...
                    break;
                case RenderPosition.LEFT_DOWN:
                    ...
                    break;
                case RenderPosition.RIGHT_DOWN:
                    ...
                    break;
            }
            return backgroundRect;
        }

同理,我们也可以使用@StringDef

这样就完成了,既不用枚举,也实现了编译期的类型检查,同时还避免了只定义静态常量带来的语义模糊的问题

是不是很棒?

相关文章

  • 浅谈Android中@IntDef注解的使用

    上回书说到Android中推荐使用@IntDef代替枚举类型。 那么今天的主题就是来浅浅的了解一下@IntDef注...

  • Android 常用注解介绍及注解声明

    一、常用注解 开发中经常使用到注解,例如Android自带的 IntDef、StringDef、NonNull、N...

  • 性能

    @IntDef替代枚举 @IntDef/@StringDef本身是个Android中提供的一种注解. 添加依赖:c...

  • 替代枚举的注解

    Android中新引入的替代枚举的注解有IntDef和StringDef,这里以IntDef做例子说明一下.

  • Android 常用注解

    Nullness注解 资源注解 资源注解的Target都是PARAMETER 类型定义注解@IntDef 使用情景...

  • Android中代替枚举的@IntDef用法

    IntDef本身是个Android中提供的一种注解,用于替代枚举的使用 定义static final的常量 定义一...

  • Android中使用注解替代枚举

    枚举最大的作用是提供了类型安全。为了弥补Android平台不建议使用枚举的缺陷,官方推出了两个注解,IntDef和...

  • Android中使用注解替代枚举

    枚举最大的作用是提供了类型安全。为了弥补Android平台不建议使用枚举的缺陷,官方推出了两个注解,IntDef和...

  • 查阅资料

    @IntDef的使用(替代枚举) 注解: java 集合 [https://blog.csdn.net/zhang...

  • 注解代替枚举案例 2019-01-25

    title: 注解代替枚举案例 20180312 参考: @IntDef的使用(替代枚举) 使用情形:比如 对 a...

网友评论

      本文标题:浅谈Android中@IntDef注解的使用

      本文链接:https://www.haomeiwen.com/subject/haqbkqtx.html