仅为个人笔记。
目录
1、字符串内嵌表达式
Kotlin中字符串内嵌表达式的语法规则:
"hello, ${obj.name}. nice to meet you!"
Kotlin允许我们在字符串里嵌入${}这种语法结构的表达式,并在运行时使用表达式执行的结果替代这一部分内容。
另外,当表达式中仅有一个变量的时候,还可以将两边的大括号省略:
"hello, $name. nice to meet you!"
2、函数的参数默认值
具体来讲,我们可以在定义函数的时候给任意参数设定一个默默认值,这样当调用此函数时就不会强制要求调用方为此参数传值,在没有传值的情况下会自动使用参数的默认值。
这时如果想让num参数使用默认值该怎么办呢?模仿刚才的写法肯定是行不通的,因为编译器会认为我们想把字符串赋值给第一个num参数,从而报类型不匹配的的错误。
Kotlin提供了另外一种神奇的机制,就是可以通过键值对的方式来传参,从而不必像传统写法那样按照参数定义的顺序来传参。
我们完全可以通过只编写一个主构造函数,然后给数设定默认值的方式来实现。在给主构造函数的每个参数都设定了默认值之后,我们就可以使用任何传参组合的方式来对Student类进行实例化。
3、标准函数with、run和apply
Kotlin的标准函数指的是Standard.kt文件中定义的函数,任何Kotlin代码都可以自由地调用所
有的标准函数。
with函数
with函数接收两个参数:第一个参数可以是一个任意类型的对象,第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回。示例代码如下:
with函数可以在连续调用同一个对象的多个方法时让代码变得更加精简。
run函数
apply函数
吃水果字符串的打印结果
//run函数
val list = listof("Apple", "Banana", "Orange", "Pear","Grape")
val result = StringBuilder().run {
append("Start eating fruits.\n")
for (fruit in list) {
append(fruit).append("\n")
}
append("Ate all fruits.")
toString()
}
println(result)
4、定义静态方法
单例类
companion object
注解
class Util {
fun doAction1() {
println("do action1")
}
companion object {
//@JvmStatic注解只能加在单例类或companion object中的方法上,如果你尝试加在一个普通方法上,会直接提示语法错误。
@JvmStatic
//doAction2()方法已经成为了真正的静态方法
fun doAction2() {
println("do action2")
}
}
}
顶层
5、延迟初始化
6、密封类
由于密封类是一个可继承的类,因此在继承它的时候需要在后面加上一对括号
getResultMsg()方法中的else条件已经不再需要了。这是因为当在when语句中传入一个密封类变量作为条件时,Kotlin 编译器会自动检查该密封类有哪些子类,并强制要求你将每一个子类所对应的条件全部处理。这样就可以保证,即使没有编写else条件,也不可能会出现漏写条件分支的