java到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

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


一只名叫tom的猫
浏览 86回答 1
1回答

明月笑刀无情

Java 支持使用 lambda 表达式实例化功能接口(具有一种非默认、非静态方法的接口)。Kotlin 没有这种关系。您可以使用对象文字自行实例化接口:localCache.insert(userPreferences, object : InsertCallback {&nbsp; &nbsp; override fun ...})或者,您直接在 Kotlin 中使用函数类型:typealias InsertCallback = () -> UnitlocalCache.insert(userPreferences) {&nbsp; &nbsp; // lambda here}如果InsertCallback仍然是 Java 接口,则可以使用 SAM 转换对其进行实例化。这不适用于 Kotlin 接口。localCache.insert(userPreferences, InsertCallback {&nbsp; &nbsp; // lambda here})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java