java到kotlin类型不匹配[重复]

Posted

技术标签:

【中文标题】java到kotlin类型不匹配[重复]【英文标题】:java to kotlin Type mismatch [duplicate] 【发布时间】: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 ////// ) 【参考方案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
)

【讨论】:

以上是关于java到kotlin类型不匹配[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin正则表达式GPA不匹配[重复]

Dalvik - 将java文件添加到项目时局部变量类型不匹配 - 没有proguard [重复]

Kotlin:功能类型不匹配

Kotlin:类型不匹配:推断类型是 Intent?但意图是预期的

Kotlin 类型不匹配:推断类型是 View!但 TextView 是预期的

带有接口的 Kotlin 中的类型不匹配