java - 将 Java 转换为 Kotlin : Type mismatch. 需要 : MenuSlidingTabStrip. OnTabSelectedListener?发现 : (Nothing, Nothing) → Boolean

标签 java android kotlin kotlin-interop

我正在将一个最初用 Java 编写的 Android 应用程序转换为 Kotlin。 我很难理解以下错误消息:

Type mismatch. Required: MenuSlidingTabStrip.OnTabSelectedListener? Found: (Nothing, Nothing) → Boolean

这是发出错误信号的代码 fragment (在转换之前它工作得很好):

private var tabs: MenuSlidingTabStrip? = null //The Kotlinized class

        tabs!!.setOnTabSelectedListner{ tab, category -> /*Type mismatch...*/
            listView!!.post {
            ...
            }
        }

转换此 Java 代码后出现问题(在 MenuSlidingTabStrip 中找到):

public void setOnTabSelectedListner(OnTabSelectedListener listener) {
    this.listener = listener;
}

public interface OnTabSelectedListener {
    public void OnTabSelected(View tab, MenuCategory category);

}

Kotlin

  fun setOnTabSelectedListner(listener: OnTabSelectedListener?) {
    this.listener = listener
}

interface OnTabSelectedListener {
    fun onTabSelected(tab: View?, category: MenuCategory?)
}

你能看出问题所在吗?您需要更多代码吗?

最佳答案

我建议您使用本地支持的 lambdas 作为:

// make `this.listener` look like lambda signature as well
fun setOnTabSelectedListner(listener: (tab: View?, category: MenuCategory?) -> Unit) {
    this.listener = listener
}

tabs!!.setOnTabSelectedListner { tab, category ->
    // ...
}

如果您仍想通过手动定义的接口(interface)使用 SAM 转换,请使用 fun 关键字标记接口(interface),如 Kotlin 1.4-M1 Release changelog 中所述。 (仅适用于 Kotlin 1.4):

fun interface OnTabSelectedListener {
    fun onTabSelected(tab: View?, category: MenuCategory?)
}

// call that method like this:
tabs!!.setOnTabSelectedListner(OnTabSelectedListener { tab, category ->
    // ...
})

如果您还没有切换到 Kotlin-1.4(仍处于 beta 状态),如果您不愿意使用 native 提供的 lambda 语法,则必须手动实例化匿名对象:

tabs!!.setOnTabSelectedListner(object : OnTabSelectedListener {
    override fun onTabSelected(tab: View?, category: MenuCategory?) {
        // ...
    }
})

关于java - 将 Java 转换为 Kotlin : Type mismatch. 需要 : MenuSlidingTabStrip. OnTabSelectedListener?发现 : (Nothing, Nothing) → Boolean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63059867/

相关文章:

Int 上的 Kotlin 引用相等行为,值在 -128 到 127 之间

java - 抽象枚举的功能

java - Android - 如何在游戏中正确适配位图?

android - 如何在安卓模拟器上模拟蓝牙

android - 如何在 android 中使用 Google places API 添加自定义地点

android - 将数据从底部工作表对话框 fragment 传递到 fragment

android - Kotlin:如何将对象列表插入到 Room 中?

java - 我的 JTable 抛出 classCastException。我正在从文本文件加载,需要(真/假)列显示为复选框

java - 在没有 Visual 的情况下在 java 中打开链接

Android微调器弹出文本颜色