可空性(避免空指针异常)

/*
*这个函数的参数代表传入一个String类型变量的实例,这代表它不可以为空
*/
fun a(str:String){
println(str)
} //这样调用a()会在编译期就显示错误,因为a()的参数不可以是null
>>>a(null) //这会报错 /*
*我们可以使用 ?来手动的标注哪些变量可以为空值
*/
fun a(str:String?){
println(str)
} /*
*一旦某个变量被标注为可空,那么这个变量将不能使用一些方法,如.length()
*/
fun a(str:String?){
println(str.length) //会报错
} /*
*可以使用if来判断,这样编译器会根据上下文来得知变量不为空,但是代码会冗长
*/
fun a(str:String?){
if(str!=null){
println(str.length) //会报错
}
} /*
*安全调用运算符“ ?. ”,如果str!=null,那么会正确调用str的length方法;如果str为空,那么调用不会成立,整个表达式的值为null,所以打印null
*/
fun a(str:String?){
println(str?.length)
} /*
*Elvis运算符 “ ?: ” 如果对象为null时,用冒号后的值代替原本的值
*/
fun a(str:String?):Int{
//若不为空,返回字符串长度,若为空,返回-1
return str?.length?:-1
}

安全转换 " as? "

/*
*尝试把值转换成给定的类型,如果不合适,则返回null
*/
fun a(str:String?):Int{
println(str as? Int)
return 0
}
>>>a("1")
null

非空断言" !! "

  断言一个数据是非空的,如果是空值,就抛空指针异常。

let函数

/*
*如果str是非空的,那么调用lambda中的代码块
*如果是null,那么什么也不会发生
*/
fun a(str:String?):Int{
str?.let {
println(str.length)
}
return 0
}

延迟初始化 lateinit

/*
*在一个类声明一个属性,如果它需要在其他方法中单独初始化,可以声明一个可空类型变量使它等于null,但是这样每次使用这个变量都需要判断空值。
*另一个方法是使用lateinit延迟初始化属性
*/
class A{
lateinit var name:String fun a1(){
print(name) //这里可以直接使用,不需要空值判断。如果为null,那么会报错----lateinit property name has not been initialized
}
}

Kotlin中的数据类型

  kotlin中的Int同样可以调用方法,就像Java中的包装类那样。但Java中存在基本数据类型是因为 数值类型的保存速度 比引用类型的保存速度要快。

  所以kotlin中并没有将Int之类的类型完全等于Java中的包装类。

  kotlin在编译时,会尽量将数值变量编译成数值类型,如果数值变量被“?”指定为可空,或者是作为集合的参数,那么将会被编译成包装类。

Any 根类型

  Java中的Object类型是所有引用类型(除八种基本数据类型)的父类。

  在Kotlin中,与之想类似的是Any类型。

  但有一些不同的地方,Any是所有非空类型的超类,其包括Int,Boolean等。而可空类型则可以用“Any?”。

Unit:Kotlin中的Void

  Java中的方法如果没有返回值,则使用void修饰。Kotlin中与之对应的是Unit。

  方法中的Unit可以省略,但如果作为参数传入则不能省 fun a(value:Int -> Unit){ } .

返回值类型为nothing的方法代表这个方法永远不能正常返回,如一个死循环的方法

基本数据类型的数组使用像IntArray这样的特殊类来表示,它的参数会被编译成数值类型

Kotlin学习(5)类型系统的更多相关文章

  1. kotlin 学习感受

    目录 kotlin 学习感受 特点 优点 屎一样的缺点 总结 kotlin 学习感受 直白的说..很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的 ...

  2. Kotlin 学习笔记(一)

    (Kotlin 学习笔记的文档结构基本按照 Java 核心技术一书的目录排列) 基本程序设计结构 数据类型 数字 类型 宽度 Double 64 Float 32 Long 64 Int 32 Sho ...

  3. Kotlin学习笔记(9)- 数据类

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...

  4. Kotlin学习快速入门(7)——扩展的妙用

    原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...

  5. Kotlin学习第一课:从对比Java开始

    1. 介绍 今年初,甲骨文再次对谷歌所谓的安卓侵权使用Java提起诉讼,要求后者赔偿高达90亿美元.随后便传出谷歌因此计划将主力语言切换到苹果主导的Swift,不过这事后来没了跟进. 但谷歌在这两天的 ...

  6. kotlin学习-初次见面

    第一次相识 最近看了很多介绍kotlin的文章.怀着好奇心改造了之前用java写的一个工具jar包.功能不是很复杂,类也只有几个,却足足写3个小时.期间一边看教程,一边写,有一种找回原来第一次写代码的 ...

  7. kotlin学习笔记-异常好玩的list集合总结

    不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){ var StringVal = "12_12_13_15_a_b_c_d_yu_ ...

  8. kotlin学习(二)——类

    Kotlin中的类遵循一个简单的结构.尽管与Java有一点细微的差别.你可以使用try.kotlinlang.org在不需要一个真正的项目和不需要部署到机器的前提下来测试一些简单的代码范例. 1. 怎 ...

  9. kotlin学习三:初步认识kotlin(第二篇)

    上一章熟悉了kotlin基本的变量和函数声明,并明白了如何调用函数.本章再来看一些其他有用的东西 包括: 1. kotlin代码组织结构 2. when语法 3. 循环迭代语法 4. try表达式 1 ...

随机推荐

  1. CF1260F

    题目大意 一棵树,每个节点的权为L[i]~R[i],一棵树的贡献为\(\sum\limits_{h_{i} = h_{j}, 1 \le i < j \le n}{dis(i,j)}\),其中\ ...

  2. Python如何快速初始化一个二维数组

    正确的方法 cols= 3 rows = 2 memo = [[1] * m for i in range(n) ] 下面这种做法是错误的 memo = [[1] * m ] * n 这会导致 mem ...

  3. LOJ #539. 「LibreOJ NOIP Round #1」旅游路线 倍增floyd + 思维

    考试的时候是这么想的: 求出每一个点花掉 $i$ 的花费向其他点尽可能走的最长距离,然后二分这个花费,找到第一个大于 $d$ 的就输出$.$然而,我这个记忆化搜索 $TLE$ 的很惨$.$这里讲一下正 ...

  4. codevs 1020 孪生蜘蛛 x

    题目描述 Description 在G城保卫战中,超级孪生蜘蛛Phantom001和Phantom002作为第三层防卫被派往守护内城南端一带极为隐秘的通道. 根据防护中心的消息,敌方已经有一只特种飞蛾 ...

  5. 大哥带的Orchel数据库时间盲注

    0X01Oracle基于延时的盲注总结 0x00 前言 oracle注入中可以通过页面响应的状态,这里指的是响应时间,通过这种方式判断SQL是否被执行的方式,便是时间盲注: oracle的时间盲注通常 ...

  6. mac osx终端批量删除文件

    sudo su cd / find ./ -name "*.html" -exec rm -rf {} \;  注意 {}和\;之间有空格 find [目录名] -name &qu ...

  7. 通过构造器配置Bean

    public class Role { private Log id; private String roleName; private String note; public Role(String ...

  8. 第四周实验总结&实验报告

    实验二 Java简单类与对象 实验目的 掌握类的定义,熟悉属性.构造函数.方法的作用,掌握用类作为类型声明变量和方法返回值: 理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实例的方法和属性 ...

  9. php中用生成的公钥、私钥进行加密解密

    $private_key = '-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQDpoODVtnSztGyb//p+g/Ob36jb3jzWzS2qovOjp ...

  10. Git-Runoob:Git 安装配置

    ylbtech-Git-Runoob:Git 安装配置 1.返回顶部 1. Git 安装配置 在使用Git前我们需要先安装 Git.Git 目前支持 Linux/Unix.Solaris.Mac和 W ...