Kotlin基本
1、继承与构造函数
Kotlin中默认类不可以被继承,使用open
关键字之后才可以被继承。
1 2 3 4 5
| open class Person{}
class Studen : Person() {}
|
Kotlin将构造函数分成了两种:主构造函数和次构造函数。
Kotlin规定,当一个类既有主构造函数又有次构造函数时,所有的次构造函数都必须调用主构造函数(包括间接调用)
1 2 3 4 5 6 7 8 9 10
| open class Person(val name:String, val age: Int){}
class Student(val sno: String, val grade: Int, name, age) : Person(name, age) {}
class Student(val sno: String, val grade: Int, name, age) : Person(name, age) { constructor(name:String, age:Int) : this("",0, name, age) }
|
2、接口
Kotlin中的接口与java类似,Kotlin允许对接口中定义的函数进行默认实现(Java 8后开始支持。
3、数据类与单例类
数据类关键字data
,Kotlin将Java中equals()、hashCode()、toString()
等固定且无实际逻辑意义的方法自动生成。
单例类,使用关键字object
即可。
Lambda基本
1 List, Set, Map的构建
Kotlin可以采取Java的方式创建,也可以使用函数来创建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| val list = ArrayList<String>() list.add("Apple") list.add("Banana") list.add("Orange")
val list = listOf("apple", "banana", "pear")
val list = mutableListOf("apple", "banana", "pear")
val list = setOf("apple", "banana", "pear")
val list = mutableSetOf("apple", "banana", "pear")
val list = mapOf("apple" to 1, "banana" to 2, "pear" to 3)
val list = mutableMapOf("apple" to 1, "banana" to 2, "pear" to 3)
|
2 集合的函数式API
Lambda表达式的语法结构:{参数名1: 参数类型, 参数名2: 参数类型 -> 函数体}
1 2 3 4 5 6 7 8
| val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })
val maxLengthFruit = list.maxBy() { fruit: String -> fruit.length }
val maxLengthFruit = list.maxBy { it.length }
|
list
还有更多函数式API,例如.filter .map .any .all
3 Java函数式API的使用
以android中的button为例:
1 2 3 4 5 6 7 8 9 10 11
| button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } });
button.setOnClickListener(view->{});
button.setOnClickListener { }
|
4 空指针检查
Kotlin默认所有的参数和变量都不可为空,可以声明为空,在类名的后面加上?Int? String?
然后要把空指针异常都处理掉。
判空辅助工具 ?.
和?:
1 2 3 4 5 6
| if (a != null) {a.doSomething()}
a?.doSometing() val c = if (a ! = null) { a } else { b }
val c = a ?: b
|
let
函数,let函数属于Kotlin中的标准函数
1 2 3 4 5
| obj.let { obj2 -> obj2.doSomething() }
obj.let { it.doSometing() }
obj?.let { it.doSomething() }
|
Kotlin中的实用小技巧
字符串内嵌表达式
与JavaScript中类似
1 2 3
| "hello, ${obj.name}. kotlin!"
"hello, $name. kotlin"
|