kotlin学习day7:null安全

来源:互联网 发布:mac解压缩软件zip 编辑:程序博客网 时间:2024/05/23 07:23

如果你是一个程序开发者,无论使用何种语言,我相信大家都遇到一个问题:NullPointException,尽管大部分语言已经尝试各种办法去应对这种让人头痛的情况。Kotlin在处理null安全方和其他语言一样,都围绕着一个黄金准则:如果变量是null,编译器强制我们使用某种方式去处理。

1.Kotlin中的null声明

  • 指定一个变量是可null是通过在类型的最后增加一个问号。

因为Kotlin中一切都是对象,甚至是Java中的基本数据类型,所以下面我们声明一个可为null的Integer对象

 var a: Int? = null

当我们将一个对象标记为可null,编译器就会知道他,因此我们在使用它之前,必须进行null检查,当然Kotlin中还有一个特性,当我们对一个标记为可null对象进行检测之后,编译器会自动将它转型为不可null类型。

  if (a != null) {        a.toString()    }

2.安全访问操作符(?)

当我们代码越来越多,创建对象越来越多的时候,我们需要编写大量的代码去进行null检测吗?当然不是,因为大多数时候我们不需要使用Null类型,因此也不需要检测他,只有彻底弄清一个对象可以为null时,我们才需要那样做。Kotlin基于这一点,也给我们提供了一个简洁的方案

  var a: Int? = null  a?.toString()

?是Kotlin中的安全访问操作符,只有a不为null的时候才会执行它否则什么也不做,当然我们也可以使用操作符(?:)

  • case1
 var a: Int? = null Log.i("Lbjfan", a?.toString() ?: "lbjfan")

运行结果

09-06 22:18:59.774 21040-21040/com.example.admin.kotlindemo I/Lbjfan: lbjfan
  • case2
 var a: Int? = null a = 0 Log.i("Lbjfan", a?.toString() ?: "lbjfan")

运行结果

09-06 22:18:59.774 21040-21040/com.example.admin.kotlindemo I/Lbjfan: 0

3.可null性可Java库

在Java中,所有对象可以被定义为null。所以我们不得不处理大量潜在的在现实中不可能是null的null变量。很幸运,新版本的Android开始使用 @Nullable 和 @NonNull 注解来辨别参数是否可以是null或者否个函数是否可以返回null。当我们怀疑时,我们可以进入源码去检查是否会接收到一个null对象。现在开始,当一个Jetbrains的 @Nullable 注解(这个与Android的注解不同)被注解在一个非null的变量时,就会获得一个警告。相对的没有发生在 @NotNull 注解上。

原创粉丝点击