title | date | author | tags | keywords | categories | reward | reward_title | reward_wechat | reward_alipay | source_url |
---|---|---|---|---|---|---|---|---|---|---|
[译]Kotlin M14 is out! |
2015-10-01 09:16:00 -0700 |
Andrey Breslav |
官方动态 |
false |
Have a nice Kotlin! |
随着即将到来,我们转向更短的里程碑。认识M14带来以下变化:
- 支持文件类的注释
- 标准库的新Java API
- 操作员操作符修饰符
- 现在通过合成字段变量访问备份字段
我们正在用语言变化来包装,所以在M14中没有什么真正戏剧性的。 注意</ strong>:我们正在删除以前不推荐使用的功能和功能,因此请确保在安装M14之前运行代码清理</ em>。
旧的 $ propertyName </ code>语法已弃用。要访问getter / setter内的后备字段,请使用
字段</ code>合成变量:
{% raw %}
{% endraw %}
var prop: Int = 1
get() {
notifyRead(field)
return field
}
set(v) {
notifyWrite(field, v)
field = v
}
{% raw %}
{% endraw %}
如果同一范围内的另一个属性被命名为 field </ code>,我们需要使用“ this。</ code>”来限定其使用。
需要在声明(而不是在构造函数中)初始化具有后备字段和自定义设置器的Var属性,因为这种初始化器将绕过设置器直接写入到后台字段。
在这种模式不够灵活的情况下(可能很少见),请考虑引入后台属性(可以使用相应的重构)或使用属性委托。
正如宣布的那样 先前 ,Kotlin M14期望通过运算符符号(例如 plus </ code>, iterator </ code>等)调用的函数被标记为 operator </ code>修饰符。注意:当我们扩展 Any </ code>, Iterable </ code>或 Comparable </ code>时,运算符</ code>修饰符将自动继承,因此不需要担心他们当需要以操作员形式使用Java方法时,请使用标记为 operator </ code>的扩展功能:
{% raw %}
{% endraw %}
operator fun JavaClass.plus(other: JavaClass): JavaClass = this.plus(other)
{% raw %}
{% endraw %}
使用代码清理</ em>可以自动向项目中使用的所有运算符添加修饰符。
注意:Infix功能将在最近的将来迁移到相同的方案。
由于M14我们需要使用 const </ code>前缀Kotlin常量,以便能够在注释中使用它们,并从Java中看到字段:
{% raw %}
{% endraw %}
const val MAX = 239
{% raw %}
{% endraw %}
代码清理</ em>将为您添加缺少的 const </ code>修饰符。
由于M13,默认情况下,每个源文件的顶级函数和属性都将放在一个单独的类文件中(详细信息 这里 )。现在我们可以通过应用文件注释来注释这些类:
{% raw %}
{% endraw %}
// FILE: foo.kt
@file:MyClassAnnotation
package bar
fun baz() {}
{% raw %}
{% endraw %}
将被编译成
{% raw %}
{% endraw %}
// Pseudo-Java
@MyClassAnnotation
public final class FooKt {
public static void baz() {...}
}
{% raw %}
{% endraw %}
当我们转向了 新的类文件布局 ,现在是退休老人的时候了。由于M14旧程序包外观类(例如 FooPackage </ code>)已被弃用,IDE可帮助您通过代码清理</ em>将Java代码迁移到新的方案。
注意</ strong>:包立面将很快丢弃,因此请务必迁移您的代码。
标准库(以前的 kotlin.KotlinPackage </ code>类)也被迁移到新的方案中:见下文。
- 私有的顶级文件现在是私有的
- 内部在编译器中检查(不仅IDE)
- 私有的接口是真正的私人现在
- 数据类中的等于通过调用他们的.equals()方法(通过身份工作)比较数组,
- 被禁止
- 许多遗传和其他自由度的数据被禁止进行数据分类(见本博客)
- 接口中禁止受保护的内部成员
- _,__,___被禁止在标识符中,即我们可以使用_foo,但不能单独使用(保留供将来使用)
- identityEquals()函数不赞成使用===
对于Java的观点,Kotlin的标准库现在被组织成实用程序类,每个类都专用于其自己的数据类型和/或操作。例如:
- ArraysKt - 数组操作,数组扩展,阵列工厂方法
- CharsKt - Char和Char.Companion的扩展名,大多数应该被隐藏
- CollectionsKt - 对迭代,集合和列表的操作,列出工厂方法
- ComparisonsKt - 比较器操作,比较器工厂方法和执行比较的功能
在API文档中查看更多内容。
像往常一样,IDE可以帮助您通过代码清理</ em>从M13无缝迁移。 M14还有几个新的便捷功能:
- 如上所述,在某些情况下,我们需要私人支持属性。您可以通过意图行动轻松介绍: