簡體   English   中英

如何用Java Object覆蓋Kotlin中的任何參數?

[英]How to override Any parameter in Kotlin with Java Object?

我正在編寫一個 retrofit 實現,我有以下接口方法:

suspend fun uploadAvatar(file: Any, sessionToken: String)

在我的實現中,我試圖將“文件”參數覆蓋為 MultipartBody.Part object:

override suspend fun uploadAvatar(file: MultipartBody.Part, sessionToken: String)

我收到以下錯誤:

錯誤信息

我可以看到 okhttp3 寫在 Java 中,我假設這就是錯誤的原因。 如果是這樣,我該如何解決? 否則還會發生什么?

這不是因為它寫在 Java 中。這是因為您試圖通過縮小輸入參數的類型來違反接口契約。 該接口聲明file可以是任何類型,因為它是 Any 類型。 如果編譯器允許您縮小類型定義,那么您的 class 將能夠調用file上特定於MultipartBody.Part的函數,然后將您的 class 的實例作為接口類型傳遞,而其他一些代碼可以傳遞不同的 class 類型到您的 function 作為file ,這沒有意義。

我不能建議如何避免這個問題,因為你沒有說你是如何使用你的界面的。 我看不出它與 Retrofit 有什么關系。

通常,使用 generics 可能會解決此類問題,但這僅適用於某些用例。 例子:

interface Foo<in T> {
    suspend fun uploadAvatar(file: T, sessionToken: String)
}

class MyFooBodyImpl: Foo<MultipartBody.Part> {
    suspend fun uploadAvatar(file: MultipartBody.Part, sessionToken: String) {
        TODO()
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM