动态类型
dynamic
类型基本上关闭了 Kotlin 的类型检查系统:
- 该类型的值可以赋值给任何变量或作为参数传递到任何位置;
- 任何值都可以赋值给 dynamic 类型的变量,或者传递给一个接受 dynamic 作为参数的函数;
- null-检查对这些值是禁用的。
dynamic
最特别的特性是,我们可以对dynamic
变量调用任何属性或以任意参数调用任何函数:
在 JavaScript 平台上,该代码将按照原样编译:在生成的 JavaScript 代码中,Kotlin中的 变为 dyn.whatever(1)
。
动态调用总是返回 dynamic
作为结果,所以我们可以自由地这样链接调用:
当我们把一个 lambda 表达式传给一个动态调用时,它的所有参数默认都是 类型的:
- 一元
- 前置:-、 +、 !
- 前置及后置:++、 —
- 索引访问:
- 读:d[a],多于一个参数会出错
- 写:d[a1] = a2,[] 中有多于一个参数会出错
in
、!in
以及 操作对于dynamic
类型的值是禁用的。
更多技术说明请参见规范文档。
原文: