回顾 Kotlin 1.4 的全新语言特性和更多改进
发布人:开发技术推广工程师 Wojtek Kaliciński
来自开发者社区的热情与积极采用推动了 Kotlin 成为 Android 开发的 首选语言 (Kotlin-first)。随着 Kotlin 不断发展,JetBrains(Kotlin 的创建者)、开源社区以及 Google 团队也将持续投入更多的资源和精力。
我们很高兴与大家分享 Kotlin 1.4 版本,这将是 Kotlin 发展的下一个里程碑,包含新的语言特性、改进的编译器和工具。以下是此版本中部分振奋人心的新特性的简要概述。您可以在 JetBrains 官方博客 中阅读有关 Kotlin 1.4 的更多信息。
新语言特性
Kotlin 1.4 中引入的新语言特性改善了编写 Kotlin 代码的 "人机工程学",例如:
Kotlin 接口的 SAM 转换
过去,只有 Java 编程语言中定义的功能接口(即只有一个单一抽象方法 - SAM)受益于 Kotlin 中的速记语法:
executor.execute { println("This is shorthand for passing in a Runnable") }
现在,Kotlin 1.4 可以将 Kotlin 接口标记为功能接口,并通过添加 fun
关键字让它们以类似方式工作:
fun interface Transformer<T, U> { fun transform(x: T): U } val length = Transformer { x: String -> x.length }
Kotlin 1.4 版本说明 页面介绍了有关新语言特性的更多信息,如:混合命名和位置参数、尾部逗号、可调用引用改进,以及在循环中的 when
内部使用 break
和 continue
。
显式 API 模式
另外一个新特性是 显式 API 模式,面向 Kotlin 的库作者。
该模式强制执行 Kotlin 的某些语言属性,这些属性通常为可选,例如指定可见性修饰符,以及任何公共声明的显式键入,防止设计库的公共 API 时出错。官方文档说明了如何启用显式 API 模式并开始使用这些附加检查。
编译器的改进
上述语言特性是 Kotlin 1.4 中密切贴合开发者的一部分改动,其他大部分工作是以提高 Kotlin 编译器的整体质量和性能为主。
现在,所有开发者都可以利用的优势之一是 更强大的新类型推理算法 (默认启用),它可以在更多用例中自动推理类型,即使在复杂的场景下也支持智能转换,帮助开发者提高工作效率。
除了类型推断算法,Kotlin 1.4 还为 Kotlin/JVM 和 Kotlin/JS 带来了全新的编译器后端(Alpha 稳定阶段,可选),用IR 编译器 生成代码并用于 Kotlin/Native 后端。
Jetpack Compose 需要 Kotlin/JVM IR 后端。Google 工程师正在与 JetBrains 合作,希望将其打造成默认的 JVM 编译器后端。
因此,即使您当前不使用 Jetpack Compose 进行开发,我们同样建议您尝试全新 alpha 版 Kotlin/JVM 后端,如果在使用中有任何问题和功能请求请提交到 问题跟踪器。
在 Gradle 构建脚本中指定额外编译器选项即可启用新的 JVM IR 后端:
kotlinOptions.useIR = true
立即体验 Kotlin 1.4!
项目和 IDE 更新到 Kotlin 1.4 需要完成两个步骤。
首先,确保您使用最新版 Android Studio,以最大限度地提高性能优势以及与最新 Kotlin 插件的兼容性。当与 IDE 版本兼容的 Kotlin 1.4.0 插件可用时,Android Studio 将提示您,或者您也可以转到 Preferences | Plugins 手动触发更新。
启用插件后,您可以更新 build.gradle 脚本中的 Kotlin Gradle 插件版本,将应用项目升级以使用 Kotlin 1.4。根据插件的管理方式,您必须在顶层项目的 buildscript
块中更新版本:
buildscript { dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.0" } }
或在模块级别的 build.gradle 文件的 plugins
块中更改版本号:
plugins { id 'org.jetbrains.kotlin.android' version '1.4.0' }
请务必仔细阅读语言改动并更新项目代码,确保兼容最新版本。快来体验 Kotlin 1.4 吧!
Java 是 Oracle 和 / 或其附属公司的注册商标。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一个小栗子比较 golang、php、Node.js、Python、Rust 性能
看到网友toozyxia(https://my.oschina.net/xiayongsheng/blog/4775399)的对比,突发奇想,增加Node.js的对比 golang: package main import ( "fmt" "os" "reflect" "runtime/pprof" "runtime/trace" "strconv" "time" "unsafe" ) type CalcCollection struct { } func (c *CalcCollection) V0() { arr := map[string]int64{} for i := int64(0); i < 1000000; i++ { value := time.Now().Unix() key := strconv.FormatInt(i, 10) + "_" + strconv.FormatInt(value, 10) arr[key] = value } } func (c *CalcCollection) V1...
- 下一篇
想自己写框架?不会写Java注解可不行
用注解一时爽,一直用一直爽 Java后端开发进入spring全家桶时代后,开发一个微服务提供简单的增删改查接口跟玩泥巴似的非常简单,一顿操作猛如虎,回头一看代码加了一堆注解:@Controller @Autowired @Value,面向注解编程变成了大家不可缺少的操作。 想象一下如果没有注解Java程序员可以要哭瞎😭 既然注解(annotation)这么重要,用的这么爽,那注解的实现原理你知道么?我猜你只会用注解不会自己写注解(手动滑稽)。 好了,下面的内容带大家从零开始写一个注解,揭开注解神秘的面纱。 原来注解不神秘 注解用大白话来说就是一个标记或者说是特殊的注释,如果没有解析这些标记的操作那它啥也不是。 注解的格式如同类或者方法一样有自己特殊的语法,这个语法下文会详细介绍。 那如何去解析注解呢?这就要用到Java强大的反射功能了。反射大家应该都用过,可以通过类对象获取到这个类的各种信息比如成员变量、方法等,那注解标记能不能通过反射获取呢?当然可以了。 所以注解的原理其实很简单,本质上是通过反射功能动态获取注解标记,然后按照不同的注解执行不同的操作,比如@Autowired可以注...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7设置SWAP分区,小内存服务器的救世主
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池