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

/*
*这个函数的参数代表传入一个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. jquery animated选择器 语法

    jquery animated选择器 语法 作用::animated 选择器选取当前的所有动画元素.直线电机参数 语法:$(":animated") jquery animated ...

  2. BZOJ 4399: 魔法少女LJJ 线段树合并 + 对数

    Description 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了LJJ感叹道“这里真是个迷人的绿色世界,空气清新.淡雅,到处散发着 ...

  3. #381 Div2 Problem C Alyona and mex (思维 && 构造)

    题意 : 题目的要求是构造出一个长度为 n 的数列, 构造条件是在接下来给出的 m 个子区间中, 要求每一个子区间的mex值最大, 然后在这 m 个子区间产生的mex值中取最小的输出, 并且输出构造出 ...

  4. FJOI2017 day2游记

    day0 早上复习了一下凸包,lct的板子,发现现在的我好菜鸡啊,做题基本上还得看题解,自己不是很能分析出来. 下午去看考场,在附中机房又写了一遍lct,然后a掉了文理分科完就回去了. 回家的路上走在 ...

  5. WebStorm 在 Mac 版本的基本设置,包括 ES6、Node.js、字体大小等

    WebStorm 在 Mac 和 win 的设置有区别,便于以后用到快速查找,记之. 要设置先点击 WebStorm 字样如下图: 后点击 Preferences 字样如下图: 设置 es6 语法, ...

  6. 【转】博弈论——acm

    转自http://blog.csdn.net/lgdblue/article/details/15809893 序:博弈是信息学和数学试题中常会出现的一种类型,算法灵活多变是其最大特点,而其中有一类试 ...

  7. Access to the requested object is only available from the local network phpmyadmin

    http://stackoverflow.com/questions/11999371/access-to-the-requested-object-is-only-available-from-th ...

  8. yanse

    0E71F9   左上面蓝色 0EA8FF 左下面蓝色 498B54  右边绿色

  9. linux修改时区为东八时区,北京时间,上海时间

    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime echo "Asia/Shanghai" > /etc/tim ...

  10. spring 中的一些注解功能--不定更新

    1@Qualifier注解? 下面的示例将会在Customer的person属性中自动装配Person的值. public class Customer { @Autowired private Pe ...