Java到kotlin类型不匹配

时间:2019-04-30 11:20:47

标签: java android kotlin

我尝试将给定的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

如何解决此问题,请帮助我

1 个答案:

答案 0 :(得分:0)

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

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

    for (int i = 0; i < array.length(); i++) {
        JSONObject object = recs.getJSONObject(i);
        if(object.has("date")){
           String value = object.getString("date");
        }
     }

或者,您直接在Kotlin中使用功能类型:

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

如果typealias InsertCallback = () -> Unit localCache.insert(userPreferences) { // lambda here } 仍然是Java接口,则可以使用SAM转换实例化它。这不适用于Kotlin界面。

InsertCallback