gpt4 book ai didi

generics - 如何修复 kotlin 中通用扩展方法的签名以解析 kotlin 中的 "Type inference failed"

转载 作者:行者123 更新时间:2023-12-02 06:28:14 26 4
gpt4 key购买 nike

我创建了扩展方法:

@Suppress("UNCHECKED_CAST")
operator fun <T : View> View.get(@IdRes id:Int): T =
this.findViewById(id) as T

该方法主要用法:

class A {
lateinit var text: TextView

fun init(view:View) {
text = view[R.id.text]
}
}

这工作得很好,但是当我尝试在没有变量的情况下使用它时:

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.

如果我用java编写模拟代码,则可以使用View类的方法,而无需直接指定View类型。

在 kotlin 中可以吗?也许以某种方式对泛型类型的签名进行一些更改?

最佳答案

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

您可以将 get 函数作为普通函数来调用 view.get<TextView>(R.id.text) ,不使用运算符重载约定。

要实现所需的功能,您可以使用 Kotlin Android Extensions按照@Miha_x64的建议,无需使用 findViewById方法。

关于generics - 如何修复 kotlin 中通用扩展方法的签名以解析 kotlin 中的 "Type inference failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45504655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com