我尝试将给定的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
如何解决此问题,请帮助我
答案 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