Generics 如何在kotlin中修复泛型扩展方法的签名以解决;“类型推断失败”;在科特林

Generics 如何在kotlin中修复泛型扩展方法的签名以解决;“类型推断失败”;在科特林,generics,kotlin,kotlin-extension,Generics,Kotlin,Kotlin Extension,我创建了扩展方法: @Suppress("UNCHECKED_CAST") operator fun <T : View> View.get(@IdRes id:Int): T = this.findViewById(id) as T 这非常有效,但当我尝试在没有变量的情况下使用它时: fun test() { view[R.id.text].visibility = View.GONE // error } 错误: Type inference fai

我创建了扩展方法:

@Suppress("UNCHECKED_CAST")
operator fun <T : View> View.get(@IdRes id:Int): T  =
        this.findViewById(id) as T
这非常有效,但当我尝试在没有变量的情况下使用它时:

fun test() {
    view[R.id.text].visibility = View.GONE // error
}
错误:

Type inference failed: Not enough information to infer parameter T in 
operator fun <T : View> View.get(id: Int): T
Please specify it explicitly.
类型推断失败:信息不足,无法推断中的参数T
操作符乐趣视图。get(id:Int):T
请明确指定它。
如果我用java编写模拟代码,则类视图的方法不需要直接指定视图类型


在科特林有可能吗?可能会以某种方式对泛型类型的签名进行一些更改?

不可能在get运算符上指定泛型类型,编译器也不可能推断get应该返回什么类型

您可以将get函数作为普通函数调用
view.get(R.id.text)
,而无需使用运算符重载约定


为了实现所需的功能,您可以使用@Miha_x64建议的,而无需使用
findViewById
方法。

我猜Java只是默认为
T
的绑定,如果它有效,但Kotlin没有。我已经找到了解决方法view.get(R.id.text)=view.go,但在这种情况下我更喜欢view.findViewById(R.id.text)因为括号在读取语句时为解析语句添加了大量杂讯。使用Kotlin,您可以轻松摆脱
findViewById
:现在对我来说,它是无用的,因为它不支持片段,您无法控制何时像Butterknife那样将视图绑定到字段,而且对于动态布局来说,它非常失败。
Type inference failed: Not enough information to infer parameter T in 
operator fun <T : View> View.get(id: Int): T
Please specify it explicitly.