阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

JetBrains 发布 Kotlin 1.0

  • 2016-03-02
  • 本文字数:2092 字

    阅读完需:约 7 分钟

在 Beta 之后仅仅几个月,JetBrains 正式宣布 Kotlin 的第一个稳定版本,其基于 JVM 并兼容 Android 的新语言。制造商表示,Kotlin 打算作为一个“好工具”,目的是为了驱动设计决策向实用性和互操作性前进。Kotlin 希望解决 Java 中只能通过类库和外部工具来修复的许多问题,同时提供平滑和渐进的过渡机会。

在2010 年的初步设想中,JetBrains 决定创建Kotlin ,以此来提高开发他们自己的产品时(Kotlin 现在被使用在JetBrains 的产品中,比如IntelliJ IDEA)的生产效率。考虑到许多其他用户将不得不面对同样的问题,JetBrains 决定开源Kotlin ,并且鼓励参与和贡献。因为它基于Java 1.6,Kotlin 很快在Android 开发者中流行起来,为他们提供了获取一系列其他版本和语言所拥有的流行特性。事实上流行的证据就是新的Android 开发工具,比如 JRebel for Android ,包含了对 Kotlin 的支持。

虽然 Kotlin 在 Android 开发中超越 Java 的优势会在 Android 完成迁移到 OpenJDK 之后减弱,但是开发者能够在一些其他的领域获得益处。其中包括:

  • Getter/Setter 引用:Java 中写代码来访问属性,典型的操作是通过 IDE 辅助的代码生成、像 Project Lombok 这样的字节码操作,或者是简单的将内部属性公开(这违背了封装的原则)。在 Kotlin 中,数据类的创建默认为所有的属性提供了 getter 和 setter。
  • toString、hashCode、equals:Java 为这三个方法提供默认实现,但是这些很少有用处,这意味着开发者通常必须重写默认方法并创建他们自己的。很多情况下,所需要的实现是足够简单的,以便于通过一些类库,比如 Apache Commons Lang 和 Google Guava 来提供。Kotlin 的数据类基于类的字段为这些方法提供了一个默认实现,类似于大部分开发者所需要的,这意味着不需要去重写这些方法。此外,Kotlin 的“==”操作符不是比较引用,而是和 equals 方法一样。
  • 对象的部分构建:在很多时候,一个对象需要在只有部分参数被提供,同时其他参数保持默认值的情况下被构建。这通常通过建造者模式来完成,它创建一个建造者类和目标类来创建需要的对象。Kotlin 通过支持命名参数来解决这个问题。
  • 空值检查:对 Java 开发者来说,避免空值是一个普遍头疼的问题,通常通过 IDE 检查(检测值一直为空)、类里面的断言( Objects.requireNotNull() )、类似 @NotNull 或者 @NonNull 这样的注解的隐含验证、Google 的 Optional,或者之后的 Java 8 的 Optional 来解决。在 Kotlin 中,空值的概念已经被转移到语言自身,这意味着变量在编译时就知道它们自己是否为空:
复制代码
val x: String? = "Hi" // Declaring x as a nullable String
x.length // Does not compile, x could be null, null check needs to happen first
if (x != null) {
x.length // Compiles, Kotlin understands that x is not null by this point
}
val y: String = null // Does not compile, y is not declared as nullable
  • 字符串构建:在 Java 中,我们可以通过使用连接运算符(“a " + 变量 + " b”),String.format() 方法能提供更好的可读性(String.format(“a %s b”, 变量)),或者通过 StringBuilder/StringBuffer,如果性能是一个问题(new StringBuilder().append(“a “).append(variable).append(” b”).build())来构建字符串。Kotlin 支持很多 Ruby 和其他语言中的字符串插入的方法,意味着开发者能简单的输入“a ${变量} b”。
  • Java 8 环境之前的 Lambdas 表达式:Lambdas 表达式只在最新的 Java 版本中引入,虽然旧版本不再支持,它们仍然被广泛的使用。为了在之前的版本中使用Lambdas 表达式,用户需要使用一些工具,比如 Retrolambda 。但是 Kotlin 提供了 lambda 表达式支持,因为它基于 Java 6,它使得在旧环境中也能使用这个功能。

Kotlin 可以很容易的解决很多其他的日常问题。但是,尽管有很多好处,选用一种新语言会带来它自己的风险和挑战。一方面,在现有的项目中选用 Kotlin,可能会需要 Java 和 Kotlin 在一段时间内共存。JetBrains 试着让两者的互通性尽可能的透明来解决这个问题,同时提供一个Java-to-Kotlin 的转换工具。

另一方面,用户安全的投入到任何新工具中,都需要长期支持。JetBrains 已经通过分配大量的资源(超过20 个全职开发者)和承若通过社区贡献来进行标准化进程,来表明它对Kotlin 的承诺。JetBrains 也承诺Kotlin 的每个新版本都向后兼容。这些原则让人们想起了Java 本身的管理方式,其参考的平台是开源的(OpenJDK),标准化进程是社区领导的(JCP),并承诺每个新版本都向后兼容。

Kotlin 是否会在日益增长的 JVM 语言(迄今为止超过 50 种)中突出出来还有待观察;目前,GitHub 中已经有 200 万行 Kotlin 代码(不包括 JetBrains 项目), StackOverflow 中也有将近 700 个问题

查看英文原文: JetBrains Releases Kotlin 1.0


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者(已满),InfoQ 读者交流群(#2)InfoQ 好读者)。

2016-03-02 18:003917

评论

发布
暂无评论
发现更多内容

前端React 开发中必须知道的5个技巧

@零度

前端开发 React

Linux之atime,ctime,mtime的区别

入门小站

Linux

在线JSON转PHP Array工具

入门小站

工具

通过一个实际例子理解Kubernetes里pod的自动scale - 水平自动伸缩

Jerry Wang

Kubernetes k8s 28天写作 docker build 12月日更

60 K8S之EFK日志管理系统

穿过生命散发芬芳

k8s 28天写作 12月日更

网络安全好学吗?手把手教你学主动信息收集,网络安全基础教程

学神来啦

网络安全 信息安全 渗透测试· kali kali Linux

兄弟要盘吗?

为自己带盐

爬虫 dotnet 28天写作 12月日更

面试官:方法重写时需要注意哪些问题?

王磊

助车企升级,旺链科技与南方电网、联想等名企同斩获「创新案例奖」

旺链科技

区块链 产业区块链 供应链金融

域名基本信息查询小技巧

喀拉峻

网络安全 安全 信息安全

How old are you | 尚硅谷大数据之Canal视频教程

编程江湖

大数据 canal

揭秘字节跳动基于Hudi的实时数据湖平台

字节跳动数据平台

大数据 实时数据湖

☕【权限设计系列】「认证授权专题」微服务架构的登陆认证问题

洛神灬殇

微服务架构 12月日更 权限认证机制 授权设计

大型集团企业云管平台建设参考架构

华为云开发者联盟

架构 运维 IT治理 分布式部署 ManageOne

梦想起航

向往

盘点2021

固定资产管理平台系统解决方案

低代码小观

企业管理 资产管理 CRM 企业管理系统 CRM系统

填问卷抽大奖,中奖绝缘体的跨年福利快来领取!

InfoQ写作社区官方

热门活动

2021 优秀开源项目公布,Apache APISIX 位列其中!

API7.ai 技术团队

api 网关 Apache APISIX 优秀开源项目

技术“开源”对于金融业软件发展的影响

Speedoooo

安全 ios开发 APP开发 Andriod开发 小程序容器

平凯星辰获评 《金融电子化》2021 金融业新技术应用创新突出贡献奖

PingCAP

架构训练营模块三作业

zhongwy

架构实战营 「架构实战营」

Spring框架基础知识(03)

海拥(haiyong.site)

28天写作 12月日更

【2021废钢铁大会】拾起卖旗下天津城矿再生资源回收有限公司三获“全国优质废钢加工配送企业”称号

InfoQ 天津

【转】大数据开发之Spark面试八股文

@零度

大数据 spark

尚硅谷大数据之Canal视频教程发布!

@零度

大数据

HDFS源码解析:教你用HDFS客户端写数据

华为云开发者联盟

hdfs block appendChunk

带你认识三种kafka消息发送模式

华为云开发者联盟

kafka 时间 异步 消息发送 producer

基于磁盘量身定制,十亿规模高效向量检索方案

Zilliz

向量检索 anns 向量计算

使用亚马逊云科技DevOps 工具构建 InnerSource 生态系统

亚马逊云科技 (Amazon Web Services)

开源 InnerSource

千万级日志回放引擎设计稿

FunTester

性能测试 测试框架 FunTester 流量回放 GOREPLAY

QCon-oCPX多目标多场景联合建模在OPPO的实践

安第斯智能云

算法

JetBrains 发布Kotlin 1.0_Java_Abraham Marín Pérez_InfoQ精选文章