我嘗試將給定的 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.InsertCallbackFound:() → Unit如何解決這個問題請幫助我
1 回答

明月笑刀無情
TA貢獻1828條經驗 獲得超4個贊
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
})
添加回答
舉報
0/150
提交
取消