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类型不匹配[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Dalvik - 将java文件添加到项目时局部变量类型不匹配 - 没有proguard [重复]
Kotlin:类型不匹配:推断类型是 Intent?但意图是预期的