簡潔
大大減少樣板代碼的數(shù)量
/* 使用一行代碼創(chuàng)建一個包含
getters、 setters、 `equals()`、 `hashCode()`、 `toString()` 以及 `copy()` 的 POJO:
*/
data class Customer(val name: String, val email: String, val company: String)
// 或者使用 lambda 表達式來過濾列表:
val positiveNumbers = list.filter { it > 0 }
// 想要單例?創(chuàng)建一個 object 就可以了:
object ThisIsASingleton { val companyName: String = "JetBrains" }
安全
避免空指針異常等整個類的錯誤
/*
徹底告別那些煩人的 NullPointerException——著名的十億美金的錯誤
*/
var output: String
output = null // 編譯錯誤
// Kotlin 可以保護你避免對可空類型進行誤操作
val name: String? = null // 可空類型
println(name.length()) // 編譯錯誤
// 并且如果類型檢測正確,編譯器會為你做自動類型轉(zhuǎn)換
fun calculateTotal(obj: Any) {
????if (obj is Invoice)
????????obj.calculateTotal()
}
互操作性
充分利用 JVM、Android 和瀏覽器的現(xiàn)有庫
/*
使用 JVM 上的任何現(xiàn)有庫,因為有 100% 的兼容性,包括 SAM 支持。
*/
import io.reactivex.Flowable
import io.reactivex.schedulers.Schedulers
Flowable .fromCallable {
????Thread.sleep(1000) // 模仿高開銷的計算 "Done"
}
????.subscribeOn(Schedulers.io())
????.observeOn(Schedulers.single())
????.subscribe(::println, Throwable::printStackTrace)
// 無論是面向 JVM 還是 JavaScript 平臺,都可用 Kotlin 寫代碼然后部署到你想要的地方
import kotlin.browser.window
fun onLoad() {
? ? window.document.body!!.innerHTML += "<br/>Hello, Kotlin!"
}