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

Latest commit

 

History

History
91 lines (72 loc) · 2.21 KB

More Deprecations Coming.md

File metadata and controls

91 lines (72 loc) · 2.21 KB
title date author tags keywords categories reward reward_title reward_wechat reward_alipay source_url translator translator_url
[译]More Deprecations Coming
2015-04-06 05:55:00 -0700
Andrey Breslav
官方动态
false
Have a nice Kotlin!

语言清理列表中还有两个项目:后台字段语法和静态类型断言运算符。

背景领域

当你有一个属性并且你不手动实现它的至少一个访问器(getset)时,这样一个属性得到一个< em>,即一个保存其值的存储器:

{% raw %}

{% endraw %}
var foo: Foo? = null
    set(v) {
        ...
    }
    // default getter is used

{% raw %}

{% endraw %}

您可以通过前缀为$符号的属性名称访问备份字段:

{% raw %}

{% endraw %}
$foo = 2

{% raw %}

{% endraw %}

这可能需要绕过自定义访问器。 这个功能很少使用,并且与字符串模板(“$ foo”)的视觉冲突,令人惊讶的是,与支持字段无关),所以我们想要摆脱它。 如果您真的需要它,您的解决方法是支持属性*:

{% raw %}

{% endraw %}
private var _backing: Foo? = null
var foo: Foo?
    get() = _backing
    set(v) {
        ...
    }

{% raw %}

{% endraw %}

由于不为私有属性生成 getter 或 setter,所以产生的字节代码将是完全相同的。

静态类型断言

另一个很少使用的功能是以下语法:

{% raw %}

{% endraw %}
foo(bar, null: Baz)

{% raw %}

{% endraw %}

表达式中冒号后面的类型指定了预期的静态类型,即这不是一个转换,而只是一个指令给编译器以确保该表达式的静态类型实际上是“Bar “。很难解释这个事实与这很少使用有关(我认为 Kotlin 的测试数据是唯一的主要客户)。所以,我们正在撤回这种语法,也许稍后会使用它(可能包括数组/列表切片和 C 样式三元条件)。 如果您需要这种语法来消除您的重载错误,作为是一个很好的解决方法。