KotLin 相关文档
官方在线Reference
kotlin-docs.pdf
Kotlin for android Developers 中文翻译
Kotlin开发工具集成,相关平台支持指南
Kotlin开源项目与Libraries
Kotlin开源项目、资源、书籍及课程搜索平台
Google’s sample projects written in Kotlin
Kotlin and Android
抽象类
abstract class AbsA
abstract class AbsB internal constructor(a: Int): AbsA() {
var prop1: Int = a
val prop2: Int = 999
get() = field
abstract fun absMethod()
fun normalMethod() {
}
open fun OutsideMethod() {
}
}
class SubA: AbsA()
class SubB(v: Int) : AbsB(v) {
override fun absMethod() {
}
override fun OutsideMethod() {
super.OutsideMethod()
}
}
fun main(args: Array<String>) {
val a = object : AbsA() { }
val b = object : AbsB(1688) {
override fun absMethod() {
}
}
val c = SubA()
val d = SubB(1699)
}
密封类
密封类使用sealed关键字声明,构造函数私有
其子类必须与 密封类在同一个文件中(在1.1版本之前,子类还要求是其内部类)
sealed 关键字不适于用在接口和抽象类前
示例:
sealed class Expr {
// public constructor() //只能是private的, 默认不写也是private
// public constructor(a:Int) {}
var str: String = ""
constructor()
constructor(a: String) {
this.str = a
}
fun test() {
}
}
data class Const(val number: Double) : Expr()
data class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()
//class NotANumber : Expr()
一个函数表达式:
fun eval(expr: Expr): Double = when (expr) {
is Const -> expr.number
NotANumber -> Double.NaN
is Sum -> eval(expr.e1) + eval(expr.e2)
// else -> Double.NaN //
}
这里省去了else ,跟这是一个单例对象有关;
如果将 NotANumber 以 class 声明,那么在when表达式中,可以使用is NotANumber -> ...
或 else -> ...