动态类型

    dynamic 类型基本上关闭了 Kotlin 的类型检查系统:

    • 该类型的值可以赋值给任何变量或作为参数传递到任何位置;
    • 任何值都可以赋值给 dynamic 类型的变量,或者传递给一个接受 dynamic 作为参数的函数;
    • null-检查对这些值是禁用的。
      dynamic 最特别的特性是,我们可以对 dynamic 变量调用任何属性或以任意参数调用任何函数:

    在 JavaScript 平台上,该代码将按照原样编译:在生成的 JavaScript 代码中,Kotlin中的 变为 dyn.whatever(1)

    动态调用总是返回 dynamic 作为结果,所以我们可以自由地这样链接调用:

    当我们把一个 lambda 表达式传给一个动态调用时,它的所有参数默认都是 类型的:

    • 一元
      • 前置:-、 +、 !
      • 前置及后置:++、 —
    • 索引访问:
      • 读:d[a],多于一个参数会出错
      • 写:d[a1] = a2,[] 中有多于一个参数会出错
        in!in 以及 操作对于 dynamic 类型的值是禁用的。

    更多技术说明请参见规范文档

    原文: