【问题标题】:java to kotlin Type mismatch [duplicate]java到kotlin类型不匹配[重复]
【发布时间】:2019-09-19 01:10:03
【问题描述】:

我尝试将给定的 java(下面)代码转换为 Kotlin,但在某些时候卡住了,显示 一个错误类型不匹配

这是我将尝试转换为 kotlin 的 java 代码

public void insert(List<UserPreference> userPreferences,InsertCallback callback ){
        ioExecutor.execute(()->
        {
            userPrefDao.insert(userPreferences);
            callback.insertFinished();
        });
    }
 @Override
    public void onSuccess(List<UserPreference> userPreferences) {

        localCache.insert(userPreferences,()-> {  lastRequestedPage++;
            Log.d(TAG, "onSuccess: inserted");
            isRequestInProgress = false;});


    }

这是我发明的 kotlin 代码,但出现错误类型不匹配

fun insert(userPreferences: List<UserPreference>, callback: InsertCallback) {
        ioExecutor.execute({
            userPrefDao.insert(userPreferences)
            callback.insertFinished()
        })
    }
   override fun onSuccess(userPreferences: List<UserPreference>) {

        localCache.insert(userPreferences, {
            lastRequestedPage++
            Log.d(TAG, "onSuccess: inserted")
            isRequestInProgress = false
        })


    }
Type mismatch.
Required:
UserPrefLocalCache.InsertCallback
Found:
() → Unit

如何解决这个问题,请帮助我

【问题讨论】:

  • 使用localCache.insert(userPreferences, object :InsertCallback{ ////// })

标签: java android kotlin


【解决方案1】:

Java 支持使用 lambda 表达式来实例化功能接口(具有一种非默认、非静态方法的接口)。 Kotlin 没有这种关系。

您可以使用对象文字自行实例化接口:

localCache.insert(userPreferences, object : InsertCallback {
    override fun ...
})

或者,您直接在 Kotlin 中使用函数类型:

typealias InsertCallback = () -> Unit

localCache.insert(userPreferences) {
    // lambda here
}

如果InsertCallback 仍然是Java 接口,您可以使用SAM 转换来实例化它。这不适用于 Kotlin 接口。

localCache.insert(userPreferences, InsertCallback {
    // lambda here
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    相关资源
    最近更新 更多