Kotlin 的开发正向着 1.1 版本迈进;Kotlin 语言主要设计者 Andrey Breslav介绍了JetBrains 这门JVM 语言新版本的路线图,该版本会包含重大的新语言特性。
Kotlin 1.1 将提供以下新语言特性。
- 类型别名旨在为比较长的类型声明提供一种缩写机制,比如函数签名;类型别名不会引入新的类型,可以与原始定义互换使用。
- 扩展 **绑定方法引用 **,支持引用对象成员。这样,你就可以引用
String
对象的equals
方法,并赋给一个 Predicate 对象供后续使用:val p: Predicate<String> =“foo”::equals
。Kotlin 1.0.x 已经支持类型引用。 - 允许在类或函数的最顶层定义 **委托属性 **: ```
fun foo() {
val lazyBar by lazy { … }
while (…) {
if (…) {
lazyBar.doBaz()
…
}
}
}
委托属性提供了一种机制,可以一次性实现所有像 lazy、observable 和 map-stored 这样的特定类型的属性,这样就不需要每次都实现它们。 - **[数据类](https://kotlinlang.org/docs/reference/data-classes.html)** 将支持继承,这就提供了从另外一个类派生出一个数据类的可能。数据类是那些只包含数据的类,Kotlin 会自动生成存取器、`equals`、`hashCode`和其他通用方法。这还提供了在一个密封类中扩展数据类的可能: ``` sealed class C() { data class Example(...) : C() }
- 解构允许为 lambdas 参数传递组合名称,参见下面的例子,
forEach
的键值对参数解构成了两个部分: ```
myMap.forEach {
(k, v) ->
println(“$k => $v”)
}
- **coroutines** 是 Kotlin 异步行为的基础。据 Breslav 介绍,coroutines 比 C# 5 引入的`async/await`模型更一般化。Kotlin 也将提供`async/await`,但是以 coroutines 为基础构建,而不是作为原语: ``` fun loadImage(url: URL) = async { val bytes = await(loadBytes(url)) bytesToImage(bytes) }
在工具方面,Kotlin 1.1 将直接支持 Java 8/9 特性,如默认方法生成。此外,JavaScript 后端将与实际的语言功能集保持一致。
Kotlin 的开发由 Kotlin Evolution and Enhancement Process(KEEP)推动,并依托一个 GitHub 库描述了所有计划的应用场景。
Kotlin 1.1 的源代码和二进制文件都兼容以前的版本,也就是说,新版本的 Kotlin 编译器不会破坏同旧源代码和二进制文件的兼容性。
查看英文原文: The Roadmap to Kotlin 1.1
评论