title | date | author | tags | keywords | categories | reward | reward_title | reward_wechat | reward_alipay | source_url |
---|---|---|---|---|---|---|---|---|---|---|
[译]Kotlin M5.1 |
2013-02-27 03:03:00 -0800 |
Andrey Breslav |
官方动态 |
false |
Have a nice Kotlin! |
自从以来,已有足够的改善 Kotlin M5 所以我们今天把它们推出M5.1。其中一些事实上并不那么简单,就像使用Scala库一样 阿卡 。这篇文章快速概述了这些变化。 </ span>
理论上讲,所有JVM语言都很容易互操作。在实践中,似乎有许多小问题使它变得不愉快或几乎不可能。 其中一个问题与类名中使用“$”符号的模糊有关,这是JVM上众所周知的问题。它现在被修复,允许您使用以前不能使用的一些Akka类,如Duration。 要了解Akka在Kotlin看起来的印象,请看看 这个例子 。
在康奈尔大学和耆那教大学的学生的帮助下,我们在M5.1中实现了很多快速修复。当IDE抱怨某些错误或警告您时,您可以简单地按Alt + Enter并获取建议的修复列表:
{% raw %}
{% endraw %}我们删除了对可变参数的支持,如
{% raw %}
{% endraw %}fun foo(var x: Int) {
x = 5
}
{% raw %}
{% endraw %}主要的原因是这是令人困惑的:人们往往认为这意味着通过引用传递一个参数,我们不支持(在运行时代价高昂)。混淆的另一个来源是主要构造函数:构造函数声明中的“val”或“var”表示与函数声明(即,它创建一个属性)相同的东西。此外,我们都知道变异参数不是很好的风格,所以在函数中写入一个参数的“val”或“var”infront,不再允许catch循环的块。 如果您现有的一些代码中断,您可以使用IDE快速修复整个项目:
{% raw %}
<iframe allowfullscreen="true" class="youtube-player" height="390" src="https://www.youtube.com/embed/JY-Vx8FjtIM?version=3&rel=1&fs=1&autohide=2&showsearch=0&showinfo=1&iv_load_policy=1&wmode=transparent" style="border:0;" type="text/html" width="640"></iframe>
{% endraw %}一些Java框架(如Android)依赖于受保护的静态方法在子类中可用。虽然这似乎是一个有问题的模式,但Kotlin现在支持它(仅适用于Java兼容性),即如果您在Kotlin中扩展此类,则可以访问Java类的受保护的静态</ strong>成员。
考虑以下代码(使用Kotlin模拟到匿名内部类):
{% raw %}
{% endraw %}val x = object : A() { ... }
{% raw %}
{% endraw %}x的类型是什么?它曾经是匿名类型,但如果您从外部使用x,则无法访问它:类型无效。现在该类型将为A.这仅适用于从外部可以看到的属性,即如果x是局部变量,它将仍然具有匿名类型,因为它是无害的。
Kotlin类没有静态成员,而是类对象 </ em>:
{% raw %}
{% endraw %}class A {
class object {
val x = 1
}
}
{% raw %}
{% endraw %}现在,修复了一些错误,您可以从Java代码访问类对象的成员:
{% raw %}
{% endraw %}public static void main(String[] args) {
System.out.println(A.object.instance$.getX());
}
{% raw %}
{% endraw %}编译器也在改进:一些修复可空类型的角色与泛型交互的范围和针对范围的循环的优化。
Kotlin M5.1要求 IntelliJ IDEA 12.0.4 (不支持12.1的EAP),您可以从插件库中下载。 拥有不错的Kotlin!</ strong>