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! |
语言清理列表中还有两个项目:后台字段语法和静态类型断言运算符。
当你有一个属性并且你不手动实现它的至少一个访问器(get
或set
)时,这样一个属性得到一个< 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 样式三元条件)。
如果您需要这种语法来消除您的重载错误,作为
是一个很好的解决方法。