安卓中的@Nullable和NotNull 注释

作者: 神户短郎 | 来源:发表于2016-07-21 22:21 被阅读3576次

    参考文章:
    http://blog.csdn.net/abren32/article/details/46985115
    https://www.jetbrains.com/help/idea/2016.2/inferring-nullity.html
    http://stackoverflow.com/questions/22641830/android-studio-infer-nullity

    @Nullable和NotNull的作用

    IntelliJ IDEA makes it possible to analyse the source code for the elements that can become null, and annotate them, provided that annotations are available in the project sources.

    这些注解是用来标注方法是否能传入null值,如果可以传入NUll值,则标记为nullbale,如果不可以则标注为Nonnull. 在我们做了一些不安全严谨的编码操作的时候,这些注释会给我们一些警告。比如说

    没有注释前的例子

    这个构造方法是要传入String的类型,但在实际调用中却传入了null,系统却没有任何提示,这在我们实际的开发中会造成难以察觉的错误。

    但是在修改之后是这样的。

    添加注释后的例子

    当注释了NonNull后,再次调用方法传入null后系统便会弹出警告。这个就是这两个注释的效果。

    怎么生成@Nullable和NotNull?

    在Android Studio中已经帮我们导入了相关的注释包,只要点击Android studio中的Infer Nullity变可以生成相应的注释。

    点击Analize中的Infer Nullity
    选择当前的文件

    关于注释的拓展

    其实这两个注释都是从Android支持注解库中获取到的,在这个库中还有其他一些更好的注释:

    @CheckResult

    该注释是来告诉我们该方法的返回值类型是我们预计要使用的,而不是错误效果的方法:

    @CheckResult的用法

    可以看到,添加了这个注释后,系统会提示你所传入的参数格式是错误的(普通的提示只会分辨出是否传入的是String)

    @StringRes 与 @DrawableRes 等等

    你是不是在TextView上调用setText方法,经常会出现莫名其妙的异常java android.content.res.Resources$NotFoundException: String resource ID #0x3039? 如果设置了一个整型数给setText,TextView会假定这个整型数是一个字符串的资源id,为了设置string文本将会查询这个整数。对于整型数是无效的资源id的问题,可以通过@StringRes 注解来补救。

    在源码中已经添加好了这些注释,不用我们自己加
    传入错误类型后的提示

    以上就是我对这几个注释的理解和相关内容的整合,类似的注释还有很多,这里只讲了其中的几个典型的,感兴趣可以再去找找看。

    相关文章

      网友评论

      • 那个阳光下奔跑的少年:@StringRes
        /**
        * Denotes that an integer parameter, field or method return value is expected
        * to be a String resource reference (e.g. {@code android.R.string.ok}).
        */
        是希望通过一个整型的id,在关联的资源中拿到一个String
      • 那个阳光下奔跑的少年:那个checkResult是检查结果有没有被使用而不是"添加了这个注释后,系统会提示你所传入的参数格式是错误的(普通的提示只会分辨出是否传入的是String)"吧?感觉这个注解整体的讲解都不准确。
      • honglei92:代码检查作用
      • Geeny:谢谢
      • 李亚滨:谢谢
      • ebf9089931f8:不错,有帮助

      本文标题:安卓中的@Nullable和NotNull 注释

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