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

时间:2021-01-11 10:47:27

标签: android kotlin

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

3 个答案:

答案 0 :(得分:4)

使用 kotlin,您可以为函数添加运算符修饰符。因此,如果您有一个带有 get 函数的类,并且您可能想使用 [] 访问它,例如数组或映射,您可以添加 operator 修饰符。

<块引用>

方括号被转换为使用适当数量的参数调用 get 和 set。

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

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

然后你可以像这样调用函数:

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()

参考

答案 1 :(得分:2)

Kotlin 通过将函数标记为 operator 函数来允许运算符重载。方括号表示法是这些运算符之一 (indexed access operator)。

Kotlin 自动将 Java 函数解释为运算符函数 if their name and signature match the requirements of a Kotlin operator function。在这种情况下,如果函数返回某些内容,它会将名为 get 的函数解释为“索引访问运算符”,这允许您使用方括号表示法。

答案 2 :(得分:0)

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

相关问题