为了账号安全,请及时绑定邮箱和手机立即绑定

java到kotlin类型不匹配

java到kotlin类型不匹配

一只名叫tom的猫 2022-11-02 10:04:43
我尝试将给定的 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

})


查看完整回答
反对 回复 2022-11-02
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信