kolin学习笔记:非空类型与可空类型
记得在我一开始接触
kotlin
时,听到的最多的就是kotlin
的类型安全,各种巴拉巴拉?,关键就不断的夸安全,其他的却是什么也没有解释,差点还没入门,就直接放弃。虽然确实这是kotlin
的特性之一,但是听多了是真的腻啊!?
非空类型
kotlin
中,默认变量是为非空类型的,这意味着创建的变量不能为null
,换另种说法就是你的变量必须初始化
- 这是非空类型的写法,其实和我们平时其他语言的写法没有什么不同,只是多了个初始化赋值
var a1: String = "a1"
- 假如我们不初始化,会怎么样?
它会提示你必须初始化?,当然也有方法也可以延迟初始化的时机,让你不必在一开始就初始化,但是本质上变量还是NotNull
的,即使延迟了初始化时机,你也必须得初始化。这样好处就来了,在也不用像java
中那样,在各种地方判断变量是否为null
了,因为即使你对非空类型做if(a1 != null)的判断,返回的结果也永远是 true
。
可空类型
假如,我们在coding中,需要变量可空,可为null
,该如何做呢?
var a2: String? = null
没错,只需要在变量的类型后面加上?
,这样就表示a2
可以为null
。
但是可空类型在调用的时候,与非空类型是有区别的。
- 非空类型被调用时,和
java
中的语法一样,直接调用
if (a1.length === 2) {a1="true"} else {a1="false"}
- 可空类型被调用时,在调用变量的方法时必须得在后面加个
?
if (a2?.length === 2) {a2="true"} else {a2="false"}
a2?.length
代表如果a2!=null
,则返回a2.length
;如果a2==null
,则返回null
上面的kotlin
代码转换后的java
代码
String var10000 = this.a2;if (this.a2 != null) {if (var10000.length() == 2) {this.a2 = "true";return;}}this.a2 = "false";
可空类型不能直接给非空类型赋值,?:
的使用
上述场景中,当可空类型a2给非空类型a1赋值时,会报错。因为a2可能为null,而a1不能为null,所以需要处理当a2为null时的情况,如下
class Test {var a1: String = "a1"var a2: String? = "a2"fun check() {a1 = a2 ?: "a1"}
}
a1 = a2 ?: "a1"
中使用到了操作符?:
,咋一看感觉像java
中的三目运算符,其实他们是有所不同的。
这里表示,当a2!=null
时,a1=a2
,当a2==null
时,a1="a1"
,?:
只针对a2==null
时的情况时才选"a1"
,或者可以说?:
只能针对它前面的对象为null
时(即判断条件为前面的对象是否为null
),才能选择它后面的对象。
非空断言!!
像上面那种使用?:
的方法,有的时候对于我们来说过于臃肿与繁琐,在一些情况下,我们可以明确我们的可空对象不为空
,
那么此时就可以使用操作符!!
class Test {var a1: String = "a1"var a2: String? = "a2"fun check() {a1 = a2!!}
}
这样,我们的代码就可以更简洁,但是如果当a2==null
时,我们使用a1=a2!!
,则会抛出空指针异常,所以使用需谨慎!以下是转换后的java
代码,可以明确看到a2==null
,则抛出异常
kolin学习笔记:非空类型与可空类型相关推荐
- Kolin学习笔记十-kotlin与java互操作
Kolin学习笔记十 kotlin与java 可空性 互操作性 @JvmName @JvmFiled @jvmoverloads @jvmstatic 异常捕捉 函数类型操作 kotlin与java ...
- Java快速入门学习笔记2 | Java语言中的基本类型
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
- MATLAB学习笔记04—MATLAB的字符与字符串类型
MATLAB学习笔记 第4章字符和字符串类型 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 MATLAB学习笔记 一.字符串属性示例 二.字符串数组的索引 三.字符串中的 ...
- C#学习笔记(六):可空类型、匿名方法和迭代器
可空类型 为啥要引入可空类型? 在数据库中,字段是可以为null值的,那么在C#中为了方便的操作数据库的值,微软引入了可空类型. 声明可空类型 我们可以使用两种方法声明一个可空类型: 1 Nullab ...
- Python入门:对Excel数据处理的学习笔记【第四章】字符串类型处理技术
注:该学习笔记是根据曾志贤老师编写的<从Excel到Python,用Python轻松处理Excel数据>所学习整理的笔记. 第四章 字符串类型处理技术 目录 第四章 字符串类型处理技术 一 ...
- Python入门:对Excel数据处理的学习笔记【第五章】列表类型处理技术
注:该学习笔记是根据曾志贤老师编写的<从Excel到Python,用Python轻松处理Excel数据>所学习整理的笔记. 第五章 列表类型处理技术 列表是Python中最基础的数据结构. ...
- fetchxml 汇总_Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧
我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute(" ...
- 5G NR - RACH学习笔记3 - RACH的两种接入类型
CBRA(Contention Based - 基于竞争的随机接入) 基于竞争的RACH过程如下: 1) UE --> NW : MSG1(RACH Preamble, RA-RNTI-) 2) ...
- Go 学习笔记(32)— 类型系统(命名类型、未命名类型、底层类型、类型强制转换、类型别名和新声明类型)
1. 命名类型和未命名类型 1.1 命名类型 类型可以通过标识符来表示,这种类型称为命名类型( Named Type ). Go 语言的基本类型中有 20 个预声明简单类型都是命名类型, Go 语言还 ...
最新文章
- python-数据类型之列表
- 给喜欢写博、乐于交流的你们!
- 使用Git向GitHub上传代码
- 常用的php开发工具有哪些?
- oem718d 基准站设置_RTK基站设置、7参数、测点、放线等操作教程,文末有视频
- leetcode383. 赎金信
- 看面试题感觉生疏的知识点
- python程序异常实例_Python werkzeug.exceptions方法代码示例
- 高性能的 socket 通讯服务器(完成端口模型--IOCP)
- pyspider all 只启动了_Python 爬虫:Pyspider 安装与测试
- iOS面试题06-其他
- .net core读取appsettings.json配置信息、自定义json文件、自定义xml文件
- eyoucms栏目类型介绍
- 视频教程-C# 实战项目——快递单打印软件-C#
- 暖心的坚果 Pro 3发布会,Smartisan OS亮点颇多
- StarUML for Mac(UML软件建模器)
- 高等数学笔记-乐经良老师-第四章-微分中值定理和导数的应用-第五节-曲线的曲率
- Vue 2.0 商业案例一则-姜威-专题视频课程
- 【JavaSE】网络编程(606~630)
- asp毕业设计——基于asp+access的档案管理系统设计与实现(毕业论文+程序源码)——档案管理系统
热门文章
- android win10 投屏,安卓手机投屏WIN10电脑为什么一直不成功
- 数据中心意义和解决方案(绿色数据中心)
- UIcollectionView实现类似于超级课程表界面
- urllib.unquote()
- project facets中没有dynamic_同人界王牌quot;东方Projectquot;又增爆款?首日Steam畅销前十、好评97%...
- Linux驱动学习之:WDT(watchdog)驱动
- jsp无法编译java_org.apache.jasper.JasperException:无法为JSP编译类:
- O2O平台模式为什么需要接入分账系统?
- 特别困的学生 (特困生)
- 服务器ftp文件夹权限设置密码,ftp 打开服务器文件夹权限设置