1.內(nèi)部類
靜態(tài)內(nèi)部類
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo() // == 2
內(nèi)部類,可以訪問外部類的成員核芽,用qualified this
來指代不同的類
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}
val demo = Outer().Inner().foo() // == 1
匿名內(nèi)部類
通過object expression
來定義匿名內(nèi)部類
window.addMouseListener(object: MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
// ...
}
override fun mouseEntered(e: MouseEvent) {
// ...
}
})
如果對象是java函數(shù)接口(只有一個(gè)抽象方法的接口)囚戚,那么可以在接口名后加lambda表達(dá)式
val listener = ActionListener { println("clicked") }
枚舉
定義枚舉,每個(gè)枚舉常量都是一個(gè)object
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
枚舉可以定義屬性
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
定義方法
enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}
枚舉常量預(yù)定義的屬性
val name: String //名字
val ordinal: Int //定義的位置
通過valueOf來得到某個(gè)枚舉常量轧简,通過values來得到枚舉常量的數(shù)組
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
Enum還實(shí)現(xiàn)了Comparable接口驰坊,按照定義的順序排序
異常
扔出異常
throw MyException("Hi There!")
catch 異常
try {
// some code
}
catch (e: SomeException) {
// handler
}
finally {
// optional finally block
}
try..catch 有返回值
val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }
Kotlin沒有checked exception,當(dāng)調(diào)用聲明了checked exception的java方法時(shí)哮独,不要求catch異常