【Kotlin学习】Kotlin的类型系统——可空性

Kotlin通过可空类型防止NullPointerException,使用?表示可空,非空类型默认不能为null。安全调用运算符?.用于检查null并执行方法,Elvis运算符?:提供默认值。非空断言!!在确定值不为null时强制转换,let函数允许安全处理可空表达式。延迟初始化属性lateinit用于构造后初始化。类型参数默认可空,用out关键字可指定非空上界。与Java互操作时,类型可空性依赖注解。扩展函数可处理null,智能转换确保非空。

可空性

它是kotlin类型系统中帮助你避免NullPointerException错误的特性。

可空类型

kotlin和java类型系统第一条也可能是最重要的一条区别:kotlin对可空类型的显式的支持,这是一种指出你的程序中哪些变量和属性允许为null的方式。如果一个变量可以为null,对变量的方法的调用就是不安全的,因为这样会导致空指针异常,kotlin不允许这种调用。

int strLen(String s){
	return s.length()
}

这个函数如果传一个null参数,就会抛出空指针异常,我们试着用kotlin重写该函数,但我们要决定这个函数被调用的时候传给它的实参可以是null吗?

不能为null的写法

在这里插入图片描述

此时使用为null的实参调用strLen在编译期就会标记成错误,这个函数中的参数被声明为String类型,在kotlin中表示它必须包含一个String实例。

可以为null的写法

在这里插入图片描述

只需要在类型名称后面加上问号来标记。问好可以加载任何类型的后面来表示这个类型的变量可以存储null引用,没有问号的类型表示这种类型的变量不能存储null引用,这说明所有常见类型默认都是非空的,除非显式把它标记为可空

Type? =Type or null

一旦有一个可空类型的值,能对它进行的操作也会受到限制,比如不能再调用它的方法,也不能把它赋值给非空类型的变量,还不能把可空类型的值传给拥有非空类型参数的函数。我们可以做的最重要的操作就是和null进行比较,一旦进行了比较操作,编译器就会记住,并且在这次比较方法的作用域内把这个值当作非空来对待

在这里插入图片描述

安全调用运算符"?."

该运算符允许你把一次null检查和一次方法调用合并成一个操作

比如s?.toUpperCase()等同于if(s!=null)s.toUpperCase()else null。也就是说,如果你试图调用一个非空值的方法,这次方法调用会被正常地执行,但如果值是null则调用不会发生,整个表达式的值为null。

这次调用的结果类型也是可空的,s?.toUp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值