Kotlin初体验(五)-空安全

首先说 空 这件事,空 :

One of the most common pitfalls in many programming languages, including Java is that of accessing a member of a nullreferences, resulting in null reference exceptions. In Java this would be the equivalent of a NullPointerException or NPE forshort. from kotlin-doc,

简而言之:对空对象的引用会触发NEP。那么就有两种方式去解决问题,一种是在每次引用对象的时候都对其进行空安全的检测,另外一种就是通过手段(代码检测,编译检查 各种黑科技)来强制保证对象不为空。
     比较一下这两种方法,第一种似乎就是java,对 对象是否null 要求不严格,需要有工程师(程序猿)自行斟酌,也可以对每个对象都加 if 判断。另外一种看起来好一些,可以保证放心的引用,但是会存在问题,比如我需要一个全局变量,但是我不知道后续的操作是否会对其进行赋值,万一对其赋值了,那么我需要展示它。仅就此而言,那么声明的所有对象都不为空这件事可能是做不到的了。
    看了kotlin发现它将这两种情况给糅合了下,它允许声明一定不为空的对象,也允许可能为空的对象。通过对两种对象的不同处理操作来保证其是空安全的。kotlin 区分了这两类对象,对于声明为一定不为空的变量,kotlin执行严格的代码检测来保证其在任何时候都不会被赋予空值,这就实现上面说的第二种思路。如果你确定以及肯定你的对象一定是不为空的话,声明成非空类型变量吧,kotlin也会帮你监视它的。对于可能为空的对象,kotlin也支持你将其声明为允许空值得对象,但是在你调用它的时候,以string为例,即便你在上一行写了这么一句var str: String? = “Kotlin baba”,下一行print(str.get(0)),也是不能通过代码检测的,飘红,报错,会强制你去做判空 操作。而正是通过这这两种方式,kotlin实现了空安全。
    首先所有的变量在声明的时候都会决定一件事 这个变量是否可以(可能)是空值,这会影响到后续对这个变量引用时的一系列判断,其实就是你声明了一个变量,如果你既没有说明他是可空的,也没有在引用的时候做安全处理(后面会谈到具体的安全处理),ok,编译不会通过,强制保证 空安全。身为程序猿,还是要拿代码说的,下面给出一下java 和 kotlin 的比较,主要是对可能造 NEP 的对比(注:相同的代码,上边的是java,下边的是kotlin。)。首先说变量的空安全,In java,声明一个变量并对其进行重新赋值使用 like this:

猜你喜欢

转载自blog.csdn.net/iblade/article/details/82777167