我见过有人使用 ViewModelProvider[Someclass::class.java] 而不是 ViewModelProvider.get(Someclass::class.java),它在 Android Studio 中编译。问题是我在网上找不到任何关于这种用法的文档。
答案 0 :(得分:4)
使用 kotlin,您可以为函数添加运算符修饰符。因此,如果您有一个带有 get
函数的类,并且您可能想使用 []
访问它,例如数组或映射,您可以添加 operator
修饰符。
方括号被转换为使用适当数量的参数调用 get 和 set。
所以这只适用于名称为 get
或 set
的函数!
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)
的较短版本,没有区别。