繁体   English   中英

Kotlin 中的“ClassInstance.[Someclass::class.java]”是什么意思?

[英]What is the meaning of “ClassInstance.[Someclass::class.java]” in Kotlin?

我见过有人使用 ViewModelProvider[Someclass::class.java] 而不是 ViewModelProvider.get(Someclass::class.java),它在 Android Studio 中编译。 问题是我在网上找不到任何关于这种用法的文档。 例子

使用 kotlin,您可以将运算符修饰符添加到 function。 因此,如果您有一些 class 和get function 并且您可能希望使用[]访问它,例如数组或 map,您可以添加operator修饰符。

方括号被转换为使用适当数量的 arguments 获取和设置的调用。

所以这只适用于名称为getset的函数!

class Provider {
  operator fun get(key: String)
  operator fun set(key: String, value: String) { ... }
}

然后你可以像这样调用 function :

Provider().get("key") // IDE hint: should be replaced with indexing operator
Provider()["key"] // calls get()

Provider().set("key", "value") // IDE hint: should be replaced with indexing operator
Provider()["key"] = "value" // calls set()

参考

Kotlin 通过将 function 标记为operator function 来允许运算符重载。 方括号表示法是这些运算符之一( 索引访问运算符)。

如果 Kotlin 函数的名称和签名符合 Kotlin 运算符 ZC1C4145268E1ZA73 在这种情况下,如果名为get的函数返回某些内容,它将解释为“索引访问运算符”,这允许您使用方括号表示法。

ViewModelProvider[Someclass::class.java]ViewModelProvider.get(Someclass::class.java)的较短版本,没有区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM