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

Latest commit

 

History

History
163 lines (125 loc) · 5.12 KB

Kotlin M14 is out!.md

File metadata and controls

163 lines (125 loc) · 5.12 KB
title date author tags keywords categories reward reward_title reward_wechat reward_alipay source_url translator translator_url
[译]Kotlin M14 is out!
2015-10-01 09:16:00 -0700
Andrey Breslav
官方动态
false
Have a nice Kotlin!

随着即将到来,我们转向更短的里程碑。认识 M14 带来以下变化:

  • 支持文件类的注释
  • 标准库的新 Java API
  • 操作员操作符修饰符
  • 现在通过合成字段变量访问备份字段

语言

我们正在用语言变化来包装,所以在 M14 中没有什么真正戏剧性的。 注意:我们正在删除以前不推荐使用的功能和功能,因此请确保在安装 M14 之前运行代码清理*。

背景领域

旧的$ propertyName语法已弃用。要访问 getter / setter 内的后备字段,请使用字段合成变量:

{% raw %}

{% endraw %}
var prop: Int = 1
    get() {
        notifyRead(field)
        return field
    }
    set(v) {
        notifyWrite(field, v)
        field = v
    }

{% raw %}

{% endraw %}

如果同一范围内的另一个属性被命名为field,我们需要使用“this。”来限定其使用。 需要在声明(而不是在构造函数中)初始化具有后备字段和自定义设置器的 Var 属性,因为这种初始化器将绕过设置器直接写入到后台字段。 在这种模式不够灵活的情况下(可能很少见),请考虑引入后台属性(可以使用相应的重构)或使用属性委托。

经营者

正如宣布的那样 先前 ,Kotlin M14 期望通过运算符符号(例如plusiterator等)调用的函数被标记为operator修饰符。注意:当我们扩展AnyIterableComparable时,运算符修饰符将自动继承,因此不需要担心他们当需要以操作员形式使用 Java 方法时,请使用标记为operator的扩展功能:

{% raw %}

{% endraw %}
operator fun JavaClass.plus(other: JavaClass): JavaClass = this.plus(other)

{% raw %}

{% endraw %}

使用代码清理可以自动向项目中使用的所有运算符添加修饰符。 注意:Infix 功能将在最近的将来迁移到相同的方案。

编译时常数

由于 M14 我们需要使用const前缀 Kotlin 常量,以便能够在注释中使用它们,并从 Java 中看到字段:

{% raw %}

{% endraw %}
const val MAX = 239

{% raw %}

{% endraw %}

代码清理*将为您添加缺少的const修饰符。

注释文件类

由于 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)已被弃用,IDE 可帮助您通过代码清理*将 Java 代码迁移到新的方案。 注意:包立面将很快丢弃,因此请务必迁移您的代码。 标准库(以前的kotlin.KotlinPackage类)也被迁移到新的方案中:见下文。

其他语言变化

  • 私有的顶级文件现在是私有的
  • 内部在编译器中检查(不仅 IDE)
  • 私有的接口是真正的私人现在
  • 数据类中的等于通过调用他们的.equals()方法(通过身份工作)比较数组,
  • 被禁止
  • 许多遗传和其他自由度的数据被禁止进行数据分类(见本博客)
  • 接口中禁止受保护的内部成员
  • _,__,___被禁止在标识符中,即我们可以使用_foo,但不能单独使用(保留供将来使用)
  • identityEquals()函数不赞成使用 ===

标准库更改

对于 Java 的观点,Kotlin 的标准库现在被组织成实用程序类,每个类都专用于其自己的数据类型和/或操作。例如:

  • ArraysKt - 数组操作,数组扩展,阵列工厂方法
  • CharsKt - Char 和 Char.Companion 的扩展名,大多数应该被隐藏
  • CollectionsKt - 对迭代,集合和列表的操作,列出工厂方法
  • ComparisonsKt - 比较器操作,比较器工厂方法和执行比较的功能

在 API 文档中查看更多内容。

IDE 更改

像往常一样,IDE 可以帮助您通过代码清理从 M13 无缝迁移。 M14 还有几个新的便捷功能:

  • 如上所述,在某些情况下,我们需要私人支持属性。您可以通过意图行动轻松介绍: