Kotlin 1.0.6 8个月前

移动应用
475
Kotlin 1.0.6

IDE 插件的更新

  • try-finally 转换为 use()

通常我们在进行 IO 操作的时候,我们并不希望异常影响我们程序的执行,所以我们需要对异常进行捕获,但捕获的话我们也没有必要处理,所以写下来的就是下面的形式:

try{
    ... do something with "reader" ...
}finally{
    reader.close()
}

但这样写起来是不是非常的不流畅?如果用 use() 的话,简直一气呵成:

reader.use{
    reader -> ... do something with "reader" ...
}

所以,这次更新 Kotlin 的插件为我们带来了这样的自动转换功能:

try

  • 补全具名参数

通常我们在编写代码的时候,函数入参都会按照顺序一个一个传入,不过随着代码量的增加,特别是对于参数较多的函数,一长串的代码看上去会让我们感到非常的头疼。所以,这次更新 Kotlin 还为我们带来了自动补全具名参数的功能。

args

  • 删除空构造方法的声明
  • 合并声明和赋值
  • inline 函数的问题修复和调试工具的优化
  • 提示、KDoc 和 Quick Doc 相关的较多问题的修复

Android 相关更新

  • 支持 Android Studio 2.3 beta 1 和 Android Gradle Plugin 2.3.0-alpha3及更新的版本
  • 增加 “Create XML resource” 的提示
  • Android Extensions support 这个功能可以让我们很方便的引用 XML 布局的 View,不过这需要我们主动启用 'kotlin-android-extensions' 才行。在过去,即使不启用这个插件,IDE 也会允许我们直接引用 XML 布局的 View,但这并不能正常编译,所以这次更新修复了这个问题:只有启用了这个插件,IDE 才会允许我们引用对应的 View。
  • Android Lint 相关的问题修复。
  • 增加 Suppress Lint 提示。

Kapt 优化

尽管还不能完全支持增量编译,相比 1.0.4,这次更新较大的提升了 Kapt 的性能。如果需要启用 Kapt,请在 gradle 当中启动它:apply plugin: 'kotlin-kapt'

All-open 插件

我们知道 Kotlin 的所有类及其成员默认情况下都是 final 的,也就是说你想要继承一个类,就要不断得写各种 open。刚开始看到这一特性的时候,觉得很赞,它对培养良好的编码意识非常有帮助,不过它也在某些情况下给我们带来麻烦,比如在一些大量依赖继承和覆写的 Java 框架的使用中。

这一次 Kotlin 提供了一个妥协的办法,主要某个类被某一个特定注解标注,那么这个类就默认所有成员通通 open,省得一个一个写了。有关 allopen 的讨论,大家可以参考这里 KEEP

那么 allopen 如何使用呢?

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
    }
}

apply plugin: "kotlin-allopen"

allOpen {
    annotation("com.your.Annotation")
}

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
    }
}
 
apply plugin: "kotlin-allopen"
 
allOpen {
    annotation("com.your.Annotation")
}

那么所有被 com.your.Annotation 这个注解标注的类成员都会默认 open。除此之外,它还可以作为元注解使用:

@com.your.Annotation
annotation class MyFrameworkAnnotation

@MyFrameworkAnnotation
class MyClass // will be all-open

Kotlin 还提供了 "kotlin-spring" 插件,其中包含了 spring 相关的所有注解,这样免得我们一个一个在 allopen 的配置中声明了。

No-arg 插件

对于没有无参构造方法的 Kotlin 类,Gson 反序列化它们的时候,不知道如何实例化它们,只好用到了 Unsafe 这个类。听说 Java 9 要移除这个略显黑科技的类,如果是这样,Gson 是不是会被削弱呢?Java 的心我们还是不操了,从 Kotlin 1.0.6 开始,这个问题将得到一个比较好的解决。

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
    }
}

// Or "kotlin-jpa" for the Java Persistence API support
apply plugin: "kotlin-noarg"

noArg {
    annotation("com.your.Annotation")
}

类似于 allopen 的使用方法,如果某个类需要无参默认构造方法,你只需要用上面声明好的注解 com.your.Annotation 标注即可。当然,这个生成的默认构造方法只能通过反射调用。

小结

目前 Kotlin 1.0.x 的版本更新更侧重于稳定性和易用性,因此语言上的特性基本不会更新,主要集中于 IDE 插件和编译器插件。如果大家期待语言特性的更新,那我们就去关注一下 1.1 吧!

image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2266729
累计阅读

热门教程文档

10.x
88小节
Redis
14小节
Python
76小节
C
14小节
React Native
40小节