Skip to content
This repository has been archived by the owner on Apr 13, 2023. It is now read-only.

Latest commit

 

History

History
169 lines (130 loc) · 11.6 KB

Kotlin M4 is Out!.md

File metadata and controls

169 lines (130 loc) · 11.6 KB
title date author tags keywords categories reward reward_title reward_wechat reward_alipay source_url translator translator_url
[译]Kotlin M4 is Out!
2012-12-11 01:15:00 -0800
Andrey Breslav
官方动态
false
Have a nice Kotlin!

今天我们推出了 Kotlin M4(从下) )。这篇文章概述了这个里程碑带来的新功能和其他内容。

这里和那里的改进

Kotlin M4 是JDK7 友好:我们仍然生成兼容 Java6 的字节码,但是与 JDK7 编译相关的一些问题现在已经修复了。 类型参数推断已经进一步改进,现在更快,更多的加速即将到来。 代码完成也在许多方面得到改进。享受<img alt =“:)”class =“wp-smiley”data-recalc-dims =“1”src =“https://i2.wp.com/blog.jetbrains.com/kotlin/wp-includes/ images / smilies / simple-smile.png?w = 640&amp; ssl = 1“style =”height:1em; max-height:1em“ 总体而言 128 个问题 关闭以来 M3.1 不在。

KAnnotator:注释世界

以来 M3 , 您可以使用 外部注释 告诉系统你的方法返回/取非空值。即使不使用 Kotlin,这种机制也是有用的:你可以打开 Java 的可空性检查 (我完全建议你这样做)。 关于这个的一个问题曾经是这样,虽然你可以在编写自己的代码时注释它(我们这样做) 所有 时间 在 JetBrains),您最喜欢的库没有注释,它是如此之大,您不能手动注释。 这里的关键是“手动”。程序员是一个懒惰的生物,凭借我们的懒惰,我们希望尽可能自动化。而今天,与 Kotlin M4 一起,我们推出了KAnnotator:一种自动注释库的工具(该工具当然是用 Kotlin 编写的)。 简单来说,你的库是一个罐子(或者是一些罐子),你告诉 KAnnotator 来推断这些 jar 的注释,然后再收回一堆.xml 文件。它们包含方法和字段的注释,例如: <img alt =“”class =“aligncenter size-full wp-image-740”data-recalc-dims =“1”sizes =“(max-width:409px)100vw,409px”src =“https:// i0 .wp.com / blog.jetbrains.com / kotlin / files / 2012/12 / annotations.xml_.png?resize = 409%2C149&amp; ssl = 1“srcset =”https://i0.wp.com/blog。 jetbrains.com/kotlin/files/2012/12/annotations.xml_.png?resize=300%2C109&ssl=1 300w,https://i0.wp.com/blog.jetbrains.com/kotlin/files/2012 /12/annotations.xml_.png?w=409&ssl=1 409w“/>现在,您可以将这些注释附加到项目中,而 Java IDE 和 Kotlin 编译器都将看到它们。 KAnnotator 刚刚开始**,它会变得更加聪明,但是今天我们已经有了一个完整的 JDK 注释,可以在新的 Kotlin 插件中使用。一旦您在编辑器中打开任何 Kotlin 文件,它将建议将它们添加到您的 JDK 中:

{% raw %}

{% endraw %}

复制您的数据

Kotlin M3 推出 数据类 一个很好的方式来表示你的数据。一个受欢迎的要求是能够复制数据类的实例,并有选择地更改某些属性**,同时保持对象不可变**。 在 Kotlin M4 你可以这样做:

{% raw %}

{% endraw %}
data class Person(val firstName: String, val lastName: String)
 
fun Person.asMarried(newLastName: String)
         = this.copy(lastName = newLastName)

{% raw %}

{% endraw %}

每个数据类都获取一个 copy()函数,所有参数都有默认值,以便您只能指定要更改的那些。由于 Kotlin 支持命名参数,所有你需要做的就是'copy(property1 = v1,property3 = v2)',所有的其他属性将被复制,而'property1'和'property3'将会改变

声明站点方差... Java

这将有一个单独的职位,但我会在这里给出一个简短的公告。我们都知道 Java 让你写“List”?扩展 Foo>' 每当你不意味着修改该列表 。当你 知道 ,Kotlin 具有用于集合的声明位置方差和只读接口,因此'List '可以转到'List '的位置。现在,当您在 Kotlin 中有此功能时:

{% raw %}

{% endraw %}
fun join(l: List<Any>, separator: String): String = ...

{% raw %}

{% endraw %}

您可以传递任何列表,但如果您想从 Java将其称为呢? 在 M4 中,Kotlin 为此功能生成以下 Java 签名:

{% raw %}

{% endraw %}
String join(List<? extends Object>, String separator)

{% raw %}

{% endraw %}

这使得它可以传递一个字符串列表甚至从 Java 代码。 如果你永远不会得到这些通配符,那么现在有一个答案:写出简单的 Kotlin 并从 Java 中调用它<img alt =“:)”class =“wp-smiley”data-recalc-dims =“1”src =“https ://i2.wp.com/blog.jetbrains.com/kotlin/wp-includes/images/smilies/simple-smile.png?w = 640&amp; ssl = 1“style =”height:1em; max-height: 1em;“/>

支持弃用

一些设计决策是好的,有些不是。有些人很好,当他们来了,但不是那么好...我们需要能够弃用的东西。 Kotlin M4 支持“已弃用”注释,与 Java 的 @Deprecated 不同,需要一个字符串参数,告诉您应该使用该方法而不是使用此方法/类。 例如,在这个里程碑中,我们在标准库中弃用 arrayList(...),hashSet(...)和其他这样的函数,因为我们发现它们令人困惑:

{% raw %}

{% endraw %}
val c: List<Node> = node.getChildren()
ArrayList(c) // a copy of that list
arrayList(c) // a list containing that list, [c]

{% raw %}

{% endraw %}

一个字母的情况大大改变了意义。这就是为什么现在 arrayList()被弃用,并且新的 arrayListOf()可用。还有一个新的 list()函数,它也创建一个数组列表,但是通过只读引用返回它。所以现在 arrayList()的声明如下所示: <img alt =“”class =“aligncenter size-full wp-image-773”data-recalc-dims =“1”sizes =“(max-width:564px)100vw,564px”src =“https:// i1 .wp.com / blog.jetbrains.com / kotlin / files / 2012/12 / arrayList-1.png?resize = 564%2C42&amp; ssl = 1“srcset =”https://i1.wp.com/blog。 jetbrains.com/kotlin/files/2012/12/arrayList-1.png?resize=300%2C22&ssl=1 300w,https://i1.wp.com/blog.jetbrains.com/kotlin/files/2012 /12/arrayList-1.png?w=564&ssl=1 564w“/>
如果你在某个地方使用,呼叫站点会告诉你有什么问题,你应该做什么:

{% raw %}

{% endraw %}

IDE 改进

**在目录中运行所有测试。现在,IntelliJ IDEA 可以发现在 Kotlin 中编写的测试,以便您可以在目录/包中运行所有测试:Java 和 Kotlin。 调试器。现在可以在“变量”视图中看到包括扩展函数/属性的接收器在内的许多修复。 新的制作过程。 IntelliJ IDEA 12 带来了一个新的 make 的实现。 Kotlin M4 增加了对它的支持,这种支持最终将发展成为 Kotlin 的增量编译器。 Kotlin 主页现在具有统一的搜索框,可以汇总文档,论坛,跟踪器,源代码以及 whatnot。

{% raw %}

{% endraw %}

它每天暂时限制 100 次搜索,但这个限制将很快被删除。

诊断改进

用户提问这是正常的。当不同的用户一遍又一遍地问同一个问题时,有些人写了一个 FAQ,但是我们更喜欢更好的方式:我们希望 IDE 帮助他们找出答案。一个例子是:

{% raw %}

{% endraw %}
if (foo is List) { // ERROR!
    ...
}

{% raw %}

{% endraw %}

编译器会抱怨 List 必须有一个类型参数“List ”。但是泛型被删除,我们不能检查某些东西是字符串*的列表,所有我们在运行时知道的是它是一个列表。编译器也知道:

{% raw %}

{% endraw %}
if (foo is List<String>) { // ERROR: can't check!
    ...
}

{% raw %}

{% endraw %}

所以用户被卡住:一个类型的参数不起作用,也没有参数也不起作用。这是 IDE 来救援的地方: <img alt =“”class =“aligncenter size-full wp-image-746”data-recalc-dims =“1”src =“https://i2.wp.com/blog.jetbrains.com/kotlin/files /2012/12/QuickFix.png?resize=190%2C96&ssl=1"/>只需按 Alt + Enter 就可以出现错误(因为,我相信你总是这样做),并得到它的修正:你需要一个'明星投影“在这里。

下载

Kotlin 插件需要 IntelliJ IDEA 12,它是在几天前发布的,你可以得到它 这里开源社区版可用)。您可以从插件库中下载Kotlin M4 可从 IDE 访问 。 您的反馈非常受欢迎。 拥有不错的 Kotlin!