私は、Androidアーキテクチャコンポーネントを実装するサンプルのリポジトリからGoogleのコードをコピーし、コードをベースとして使用して、私が考えているアプリのニーズにゆっくりと適応しています。すでにエラーが表示されている部分に到達していて、その理由がわかりません。これはコードブロックです:
data class ApiSuccessResponse<T>(val responseBody: T) : ApiResponse<T>() {
constructor(body: T) : this (responseBody = body)
}
根本的なエラーメッセージは
競合するオーバーロード:com.example.rxe.api.ApiSuccessResponseで定義されたパブリックコンストラクターApiSuccessResponse(body:T)、com.example.rxe.api.ApiSuccessResponseで定義されたパブリックコンストラクターApiSuccessResponse(responseBody:T)
ApiSuccessResponse
サンプルコードのように、ここで私が呼び出します。
sealed class ApiResponse<T> {
companion object {
fun <T> create(response: Response<T>): ApiResponse<T> {
return if (response.isSuccessful) {
val responseBody = response.body()
if (responseBody == null || response.code() == 204) {
ApiEmptyResponse()
} else {
ApiSuccessResponse(body = responseBody)
}
} else {
val error = response.errorBody()?.string()
val message = if (error.isNullOrEmpty()) {
response.message()
} else {
error
}
ApiErrorResponse(errorMessage = message ?: "Unknown error")
}
}
}
}
サンプルが作成されてから、何かが変更された可能性があります。しかし、変数の名前をのではbody
なくに変更するresponseBody
と、同じエラーでクラスの呼び出しに下線が引かれますApiSuccessResponse
。
Kotlinでコンストラクターがどのように機能するかを理解していないようです。これはあなたがコピーしようとしたコードです:
data class ApiSuccessResponse<T>(
val body: T,
val links: Map<String, String>
) : ApiResponse<T>() {
constructor(body: T, linkHeader: String?) : this(
body = body,
links = linkHeader?.extractLinks() ?: emptyMap()
)
//.... rest of body
}
2つのコンストラクターがあります。
ApiSuccessResponse(body: T, links: Map<String, String>)
ApiSuccessResponse(body: T, linkHeader: String?)
リンクのマップを抽出しString
、それlinks
を一次コンストラクターに渡します)。あなたが持っているものは:
ApiSuccessResponse(resposebody: T)
ApiSuccessResponse(body: T)
一次コンストラクターを1:1で呼び出そうとしますが、同じ署名のために衝突するだけです)二次コンストラクターが必要ない場合は、完全に削除する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加