我尝试将给定的 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.InsertCallbackFound:() → Unit如何解决这个问题请帮助我
1 回答
明月笑刀无情
TA贡献1828条经验 获得超4个赞
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
})
添加回答
举报
0/150
提交
取消