kotlin - 带有let的功能类型-未解析的引用:invoke

标签 kotlin

我有onClick函数类型声明为类字段val onClick: (() -> Unit)? = null
并想像这样使用它:

if (onClick != null) {
    item.setOnClickListener { onClick.invoke() }
}

该代码有效,但是当我用let函数替换它时,它显示错误unresolved reference: invoke:
onClick?.let {
    item.setOnClickListener { it.invoke() }
}

为什么会发生?

最佳答案

这里的it是第二个lambda(传递给setOnClickListener)的接收者,而不是第一个lambda(let)的接收者。通过显式为其指定名称来将参数声明为第一个lambda,然后使用该名称,例如

onClick?.let { handler ->
    item.setOnClickListener { handler.invoke() }
}

关于kotlin - 带有let的功能类型-未解析的引用:invoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53333985/

相关文章:

android - 如何在应用程序 android Kotlin 中打开 webview 链接

kotlin - (Kotlin) lateinit 属性 'VAL variable' 尚未初始化

java - 如何在 android studio 上启用泛型类型 <T>

java - 将 Java 类转换为 Kotlin

android - 如何在 android 中使用 Dagger 对 kotlin 文件进行 UI 测试?

java - Hibernate @OneToOne 不映射 id

java - 使用位图工厂在可运行程序中以每秒 30 个图像的速度显示 150 个图像,但它很滞后

Android/Kotlin - 如何循环所有 ToggleButtons 以形成 if/else 的条件

android - 当我尝试在android中解密时出现AES BadTag异常

unit-testing - 100% 代码覆盖率;数据类模型的单元测试