Kotlin是否支持Javascript、Swift或Dart等匿名对象?
我很想知道Kotlin是否也支持映射的显式映射(比如javascript对象)。我认为,斯威夫特已经支持这一点,也支持Dart。我知道Java没有,所以这可能是Kotlin没有它的一个原因 在这里你可以看到它是如何在斯威夫特做的。我可以对科特林做类似的事情吗Kotlin是否支持Javascript、Swift或Dart等匿名对象?,javascript,swift,object,kotlin,dart,Javascript,Swift,Object,Kotlin,Dart,我很想知道Kotlin是否也支持映射的显式映射(比如javascript对象)。我认为,斯威夫特已经支持这一点,也支持Dart。我知道Java没有,所以这可能是Kotlin没有它的一个原因 在这里你可以看到它是如何在斯威夫特做的。我可以对科特林做类似的事情吗 print([ "1": "lel", "2": [ "2": 2 ], ]) 不完全是,它是静态的,所以它仍然需要互操作 他们确实有一个动态的类型,尽管它可以解决这个问题 使用动态类型值的表达式
print([
"1": "lel",
"2": [
"2": 2
],
])
不完全是,它是静态的,所以它仍然需要互操作 他们确实有一个
动态的类型,尽管它可以解决这个问题
使用动态类型值的表达式被转换为JavaScript“原样”,并且不使用Kotlin运算符约定。不完全是静态的,因此它仍然需要互操作
他们确实有一个动态的类型,尽管它可以解决这个问题
使用动态类型的值的表达式被转换为JavaScript“原样”,并且不使用Kotlin运算符约定。回答您的问题,不,不是真的。Kotlin是静态类型的,因此如果您希望一个映射包含多种类型的键,您应该创建一个映射
。如果你只是想把它打印出来,那不一定是最糟糕的事情。Kotlin还有一个很好的内联to
函数,用于在映射中构造值:
fun main() {
val v = mapOf(
"1" to "lel",
"2" to mapOf("2" to 2)
)
println(v)
}
印刷品:
{1=lel,2={2=2}
如果要对映射中存在的值进行任何其他探测,则必须手动检查类型
编辑:也是一件事,但仍然可能不是你想要的
匿名对象与映射的映射不同。它们必须具有有效标识符,并且不能动态添加到JavaScript中的like(例如,foo['prop']=5
适用于JavaScript中的任何对象foo
)。它们还附带了警告:
请注意,匿名对象只能在本地和私有声明中用作类型。如果将匿名对象用作公共函数的返回类型或公共属性的类型,则该函数或属性的实际类型将是匿名对象的已声明超类型,如果未声明任何超类型,则将是Any
。添加到匿名对象中的成员将无法访问
它们的主要用途是创建超类型或接口的匿名实现。如果你想返回并传递它,我会坚持使用地图地图,或者创建一个。惯用的Kotlin利用了这样一个事实,即类非常便宜,而且可以在一行中完成。回答您的问题,不,不是真的。Kotlin是静态类型的,因此如果您希望一个映射包含多种类型的键,您应该创建一个映射
。如果你只是想把它打印出来,那不一定是最糟糕的事情。Kotlin还有一个很好的内联to
函数,用于在映射中构造值:
fun main() {
val v = mapOf(
"1" to "lel",
"2" to mapOf("2" to 2)
)
println(v)
}
印刷品:
{1=lel,2={2=2}
如果要对映射中存在的值进行任何其他探测,则必须手动检查类型
编辑:也是一件事,但仍然可能不是你想要的
匿名对象与映射的映射不同。它们必须具有有效标识符,并且不能动态添加到JavaScript中的like(例如,foo['prop']=5
适用于JavaScript中的任何对象foo
)。它们还附带了警告:
请注意,匿名对象只能在本地和私有声明中用作类型。如果将匿名对象用作公共函数的返回类型或公共属性的类型,则该函数或属性的实际类型将是匿名对象的已声明超类型,如果未声明任何超类型,则将是Any
。添加到匿名对象中的成员将无法访问
它们的主要用途是创建超类型或接口的匿名实现。如果你想返回并传递它,我会坚持使用地图地图,或者创建一个。惯用的Kotlin利用了一个事实,即类非常便宜,而且可以在一行中完成。您想要实现什么?只是不必为日志分配变量?我希望拥有与kotlin中的上述数据结构相同的数据结构,明确地说,您希望实现什么?只是不必为日志分配变量?我希望在kotlin中显式地拥有与上面相同的数据结构