Kotlin是否支持Javascript,Swift或Dart等匿名对象?

时间:2019-12-19 17:46:25

标签: javascript swift object kotlin dart

我很想知道Kotlin是否对显式地图(例如javascript对象)具有相同/相同的支持。我认为,Swift和Dart都支持此功能。我知道Java没有,所以这可能是Kotlin可能没有Java的原因。

在这里您可以看到它是如何在Swift中完成的。我可以用Kotlin做类似的事情吗?

print([
    "1": "lel",
    "2": [
        "2": 2
    ],
])

2 个答案:

答案 0 :(得分:1)

不完全是静态的,因此仍需要进行互操作。

它们确实具有dynamic类型,但可以解决。.

Kotlin dynamic

使用动态类型值的表达式将按原样转换为JavaScript,并且不使用Kotlin运算符约定。

答案 1 :(得分:1)

要回答您的问题,不,不是真的。 Kotlin是静态类型的,因此,如果您希望地图包含多种类型的键,则可以创建一个Map<String, Any>。如果您只想打印,那不一定是最坏的事情。 Kotlin还有一个不错的内联to函数,用于在地图内构造值:

fun main() {
    val v = mapOf(
        "1" to "lel",
        "2" to mapOf("2" to 2)
    )
    println(v)
}

打印:

{1=lel, 2={2=2}}

对地图中存在的值进行任何其他探测时,都必须手动检查类型。

编辑:Object Expressions也是一回事,但可能仍不是您想要的

匿名对象与地图的地图不同。它们必须具有有效的标识符,并且不能像JavaScript中一样动态添加(例如foo['prop'] = 5适用于JavaScript中的任何对象foo)。他们还带有警告:

  

请注意,匿名对象只能在本地和私有声明中用作类型。如果您将匿名对象用作公共函数的返回类型或公共属性的类型,则该函数或属性的实际类型将是该匿名对象的声明超类型,或者如果没有,则为Any声明任何超类型。添加到匿名对象中的成员将不可访问。

它们的主要用途是创建超类型或接口的匿名实现。如果您想返回并传递它,我会坚持使用地图,或者创建一个data class。惯用语Kotlin利用了这样的事实:课程确实很便宜,并且可以一行完成。