• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 再见NullPointerException。在Kotlin里null的处理(KAD 19),kotlinnull

再见NullPointerException。在Kotlin里null的处理(KAD 19),kotlinnull

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了再见NullPointerException。在Kotlin里null的处理(KAD 19),kotlinnull等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

再见NullPointerException。在Kotlin里null的处理(KAD 19),kotlinnull


 

作者:Antonio Leiva

时间:Apr 4, 2017

原文链接:https://antonioleiva.com/nullity-kotlin/

 

关于Kotlin最重要的部分之一:无效处理,我花了很长时间完成写一篇文章。

 

东尼·霍尔(Tony Hoare)“空(null)”概念的创作者,自称“十亿美元的错误”。在你编写Java代码是,null是最容易出错的指针。

 

 

如果你在观察Bug管理器,我确信你见到的NullPointerException错误要超过90%。

 

多亏Kotlin,你将工作在更加安全的环境中(即使是用Java库),它是这些问题尽量减少。

 

Kotlin的Null

 

除非你设定,Kotlin不存在Null。

 

也就是说,没有变量缺省值能够被设置成null。记住,在Kotlin中所有类型都是对象。

 

 

因此,不能编译:

 

1 val x: Int = null

 

 

如果要变量接受Null,你必须为类型加上问号(?):

1 val x: Int? = null

 

编译时检查

 

 

然而,从这点来说,编译器强制你在对该变量做任何事情之前检查变量是否为null。这确保NullPointerException不会发生。

 

 

例如:

 

1 val y = x.toDouble()

 

 

如果你不先检查是否为null,则不能编译,必须这样:

1 if (x != null) {
2     val y = x.toDouble()
3 }

 

安全访问表达

 

 

有一个更容易的方法表示前面的例子,在调用方法时,在“.”之前加个问号(?)。

 

如果变量不是null,它将执行操作。否则,它不做任何事情:

1 val y = x?.toDouble()

 

在这种情况下,如果 x 是 null,那么表达式将返回null。所以,y将是Double?类型。

 

 

Elvis操作符

 

但是,如果我们不希望有一个可以为空变量作为操作结果怎么办?在这种情况下,Elvis操作符允许我们返回一个值:

1 val y = x?.toDouble() ?: 0.0

 

这行代码等效:

 

1 val y = if (x != null) {
2     x.toDouble()
3 } else {
4     0.0
5 }

 

 

注意:

如你所见,Kotlin中大多数语句都转化为表达式。例如,你能够将if的结果赋值给变量。

 

 

避免null检查

 

如果你确信变量不可能为null,可以用操作符(!!)可以避免null检查。

 

 

以我看,极少有情况需要这个操作符。总是有更好的解决方案。

 

 

但是,你能够这样做:

 

1 val x: Int? = null
2 val y = x!!.toDouble()

 

 

这能够编译,并且产生NullPointerException。

 

这就是为什么我说:要非常小心使用这个操作符。

  

Java支持

 

当我们使用Java库时,我们可能会发现自己要面对不同的null检查情况。

 

 

库恰当的注解

 

 

如果在Java和Android中,适当地使用@Nullable和@NotNull注解,Kotlin能够与其很好的对接,并且,能够指出变量什么时候是null,什么时候不是。

 

 

Android框架的许多部分已经正确的注解了,所以这是与Kotlin配合使用的巨大优势。

 

库没有注解

 

 

然而,如果库没有注解,类型将以特殊操作符(单一!)标注,这就意味着这是在我们这边决定一个参数或返回值是否接受null。

 

 

如果我们阅读源代码,最好检查代码以决定是否允许使用null。

 

Android没有注解的例子是RecyclerView支持库。当你创建一个适配器和生成方法时,缺省是为类型加询问。

 

但是,如果您查看源代码,会发现在需要覆盖的方法中,没有任何东西能够是null。

 

结论

 

 

对所有Java开发者,NullPointerException是个噩梦,大多数情况,这表示你的代码发生错误了。

 

 

这在Kotlin中,很容易地将这类错误几乎减少到零,即使使用Java框架和库。

 

只有这样,就可避免不必要的长时间的调试工作,而且可以让代码更加稳定。

 

 

如果你要进一步的学习所有这些,且能够流利创建你自己的Android APP,我建议你找

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 再见NullPointerException。在Kotlin里null的处理(KAD 19),kotlinnull

相关文章

  • 2017-05-26EditText的setSelection属性,setselection
  • 2017-05-26android:Activity数据传递之全局对象(application)
  • 2017-05-26Android对应用程序签名,android签名
  • 2017-05-26Git安装与上传代码至Github,git上传github
  • 2017-05-224.4.1 ContentProvider初探
  • 2017-05-26自己写的书《深入理解Android虚拟机内存管理》,不出版只是写着玩,深入理解java虚拟机
  • 2017-05-26android StringBuffer 和StringBuilder,androidstringbuffer
  • 2017-05-26翻翻git之---一个丰富的通知的工具库 NotifyUtil
  • 2017-05-26Android 6.0 开发者对系统权限的使用与练习(Permissions Best Practices)
  • 2017-05-225.2.4 Fragment实例精讲——底部导航栏+ViewPager滑动切换页面

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • ViewHolder模式超简洁写法,viewholder模式写法
    • 安卓多线程间通信和多进程之间通信有什么不同?分别怎么实现?,安卓多线程
    • Android 6.0 Permission权限与安全机制,androidpermission
    • Android SharedPreferences存储,sharedpreferences
    • Android与HTML+JS交互入门
    • Android 热修复原理及Gradle插件源码解析(以Nuwa为例)
    • Android 手机卫士--导航界面3、4和功能列表界面跳转逻辑处理,android4和
    • 高通android开发缩写
    • andriod 动态显示当前时间,andriod当前时间
    • xshell可以ping通但是不能远程服务器,putty可以远程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有