Kotlin的开发正向着1.1版本迈进;Kotlin语言主要设计者Andrey Breslav介绍了JetBrains这门JVM语言新版本的路线图,该版本会包含重大的新语言特性。
\\Kotlin 1.1将提供以下新语言特性。
\\- 类型别名旨在为比较长的类型声明提供一种缩写机制,比如函数签名;类型别名不会引入新的类型,可以与原始定义互换使用。 \\
- 扩展绑定方法引用,支持引用对象成员。这样,你就可以引用
String
对象的equals
方法,并赋给一个Predicate对象供后续使用:val p: Predicate\u0026lt;String\u0026gt; =“foo”::equals
。Kotlin 1.0.x已经支持类型引用。 \\ - 允许在类或函数的最顶层定义委托属性: \\
\\fun foo() {\ val lazyBar by lazy { ... }\ while (...) {\ if (...) {\ lazyBar.doBaz()\ ...\ }\ }\}\
委托属性提供了一种机制,可以一次性实现所有像lazy、observable和map-stored这样的特定类型的属性,这样就不需要每次都实现它们。 \\ - 数据类将支持继承,这就提供了从另外一个类派生出一个数据类的可能。数据类是那些只包含数据的类,Kotlin会自动生成存取器、
equals
、hashCode
和其他通用方法。这还提供了在一个密封类中扩展数据类的可能: \\
\ \\sealed class C() {\ data class Example(...) : C()\}\
- 解构允许为lambdas参数传递组合名称,参见下面的例子,
forEach
的键值对参数解构成了两个部分: \\
\ \\myMap.forEach {\ (k, v) -\u0026gt;\ println(“$k =\u0026gt; $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