This 表达式

在类中,this表示当前类对象的引用。在多层嵌套类中,我们可以使用this@类名来明确指定要访问的是哪个类的对象:

class A { 
    inner class B { 
        //注意:foo是一个Int的扩展方法
        fun Int.foo() { // 隐式标签 @foo
            val a = this@A // A 的 this
            val b = this@B // B 的 this
            val c = this // foo() 的接收者,一个Int对象
        }
    }
}

is 与 !is 操作符

使用is来判断对象是否是某个类型;!is语气则相反。

var s: Any = "ss"
println(s is String)
println(s !is Int)

异常

Kotlin的异常体系和Java类似,代码如下:

throw Exception("boom!") //抛出异常
try {
    // 一些代码
}
catch (e: SomeException) {
    // 处理程序
}
finally {
    // 可选的 finally 块
}

所不同的是,Kotlin的try/catch是一个表达式,有返回值。它的返回值是try代码块中最后一个表达式的值,或者catch代码块中最后一个表达式的值。

val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }

Kotlin的异常还有一个好处就是:在有异常抛出的方法中,无需在方法上面显式的再抛出异常。这在Java中是必须做的,有时候你调用了一个会抛出异常的方法,如果我们不try/catch就必须显式抛出。

Kotlin认为这种异常规范对于小项目有用,但对于大项目会导致生产力降低和代码质量下降。示例如下:

fun foo(s: String) { //方法上不在显式抛出异常
    if(s.isEmpty()) throw IllegalArgumentException("s can not be empty!")
}
更新时间: 4/30/2019, 9:52:46 PM