Kotlin 1.5.20 发布了~快来看看新特性

本次更新主要增加了以下新特性:

Kotlin/JVM

受益于最新的 JVM ,Kotlin 拓展了动态调用的使用(invokedynamic),比如可以将 String 连接在 JVM9+ 上编译为动态调用,为了和 java 保持最好的交互性,1.5.20 带来了下面的实验性支持:

  • 支持在模块中调用 Java Lombok 生成的方法,支持的注解有:@With,@Data,@Getter,@Setter,@NoArgsConstructor,@RequiredArgsConstructor 和 @AllArgsConstructor

  • JSpecify 项目中包含了 java 的 nullness 注解,可以提供更多的 null 值信息,帮助 kotlin 保持 null safety,如下:

    // JavaClass.java
    import org.jspecify.nullness.*;
    
    @NullMarked
    public class JavaClass {
        public String notNullableString() { return ""; }
        public @Nullable String nullableString() { return ""; }
    }
    

    在 kotlin 中调用:

    // Test.kt
    fun kotlinFun() = with(JavaClass()) {
      notNullableString().length // OK
      nullableString().length    // Warning: receiver nullability mismatch
    }
    

Kotlin/Native

kotlin/native 编译器支持导出 KDoc 到 Objective-C 框架中,可以让调用者更好获得接口信息,当然也支持 swift 项目,不过暂时还是实验性的。

改进 Array.copyInto() 性能:得益于相关内存管理优化,获得了 20 倍的速度提升 。

Kotlin/JS

Kotlin 1.5 提供了新的 JVM IR 后端,之前唯一缺少的是稳定的 JS 支持,此次更新进一步加强 Kotlin/JS IR 后端稳定性。

迁移到新的 JS 后端的方法可以参考我们的迁移指南,里面包含了你需要的代码更改。如果您遇到任何问题,欢迎报告给我们。

Gradle

1.5.20 提供了一些工具性的提升:

Standard library

kotlin 1.5.20 继续增强标准库中的字符处理,增加了新特性:

  • isLowerCase()/isUpperCase() 现在可以提供所有平台上一致的输出(大小写一致性),不仅仅只是英文字符的支持
  • digitToInt() 支持到所有平台上的 Unicode 字符,先前只支持 kotlin/jvm

更多信息,查看官方博客:Kotlin 1.5.20 Released!

kotlin
1.2K views
Comments
登录后评论
Sign In
·

sweat_smile 可惜服务端很少用 kotlin,代码写起来比 java 爽多了