打印类型名称
println(string.javaClass.name)
复制代码
如果kotlin没有声明返回值类型,则默认返回值类型为Unit
声明类的属性
inner class Book(var name: String) {
fun printName() {
println(this.name)
}
}
复制代码
优先使用val写出防御性代码
函数类型
(int) -> Unit
() -> Unit
(Int, String) -> Unit
(errorCode: Int, errMsg: String) -> Unit
(errorCode: Int, errMsg: String?) -> Unit
((errorCode: Int, errMsg: String?) -> Unit)?
/**
* 函数类型参数
*/
fun filter(name:String, filter: (country: Country) -> Unit) {
}
复制代码
返回值为一个函数
(Int) -> ((Int) -> Unit)
复制代码
双冒号调用类方法 class::fun
匿名函数
每个Function都有一个Invoke函数,所以想要执行函数体,需要调用函数.invoke()
private fun foo(int: Int) = { _: Int ->
println(int.toString() + "fage")
}
private fun list() {
listOf(1, 2, 3).forEach { foo(it).invoke(it) }
}
复制代码
Lambda
val sum: (Int, Int) -> Int = {x,y -> x+y}
如果Lamba表达式的返回值不是Unit, 那么默认最后一行就是其返回值
扩展函数
package com.example.kotlincore
import android.view.View
fun View.invisiable() {
visibility = View.INVISIBLE
}
fun View.gone() {
visibility = View.GONE
}
复制代码
if else 保证代码安全,消除副作用
fun ifExpression(flag: Boolean) {
val a = if (flag) "fage" else ""
}
复制代码
枚举配合when表达式
package com.example.kotlincore
/**
* 星期几枚举
*/
enum class Day(value: Int) {
MON(1),
TUE(2),
WEN(3),
THU(4),
FRI(5),
SAT(6),
SUN(7)
}
/**
* 日程
*/
fun schedule(sunny: Boolean, day: Day) {
when(day) {
Day.SAT -> basketball()
Day.SUN -> finish()
Day.FRI -> appointment()
else -> when {
sunny -> library()
else -> study()
}
}
}
fun basketball() {}
fun fishing() {}
fun appointment() {}
fun library() {}
fun study() {}
复制代码
泛型
泛型类实现查找一个元素是否在数组中,是则返回本身,反之返回null
package com.example.kotlincore
/**
* 查找数组中是否含有一个对象
*/
class SmartClass : ArrayList() {
fun find(t: T) : T? {
val index = super.indexOf(t)
return if (index >= 0) super.get(index) else null
}
}
复制代码
使用扩展函数实现上面的需求
fun ArrayList.find(t: T): T? {
val index = this.indexOf(t)
return if (index >= 0) this[index] else