class SetContentView<in R : Activity, out T : ViewDataBinding>(
     @LayoutRes private val layoutRes: Int) {
     private var value : T? = null
     operator fun getValue(thisRef: Activity, property: KProperty<*>): T {

     value = value ?: DataBindingUtil.setContentView<T>(thisRef, layoutRes)
     return value
     }
    }

    val binding: ActivityDogBinding by contentView(R.layout.activity_dog)

狗 Activity .kt
    fun <R : Activity, T : ViewDataBinding> contentView(@LayoutRes layoutRes: Int):
     SetContentView<R, T> {
     return SetContentView(layoutRes)
    }

当我尝试将 Activity 称为
val binding: ActivityLoginBinding by contentView(layoutRes = R.layout.activity_login)

它的抛出错误为



在 Android Studio 中。我在 IntelliJ 中尝试了类似的方法,它工作正常。

最佳答案

您需要为 R 方法使用 getValue 类型参数:

operator fun getValue(thisRef: R, property: KProperty<*>): T {
  ...
}

关于android - 类型推断失败。请尝试明确指定类型参数 : Kotlin,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48090049/

10-10 00:46