You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin如何在companion object中重写接口?OpenAPI+Retrofit场景问题

实现代码示例

封装层实现

class ApiBook(private val retrofitService: RetrofitBooksApi) {
    companion object {
        // 全局单例,仅初始化一次
        private val INSTANCE: ApiBook by lazy {
            val apiClient = ApiClient()
            val service = apiClient.createService(RetrofitBooksApi::class.java)
            ApiBook(service)
        }

        // 对外暴露的静态调用入口,方法名与生成接口完全一致
        suspend fun getBooksList(/* 参数与生成接口保持一致 */): MyCustomResponse<List<Book>> {
            return INSTANCE.getBooksList(/* 透传所有参数 */)
        }
    }

    // 实际封装逻辑,包含错误、空值处理
    suspend fun getBooksList(/* 参数与生成接口保持一致 */): MyCustomResponse<List<Book>> {
        return try {
            val originResult = retrofitService.getBooksList(/* 透传所有参数 */)
            // 可选:自定义数据校验逻辑
            MyCustomResponse.Success(originResult)
        } catch (e: Exception) {
            // 自定义错误转换逻辑
            MyCustomResponse.Error(code = e.code ?: -1, message = e.message ?: "未知错误")
        }
    }
}

接口完整性校验单元测试

import org.junit.Test
import kotlin.reflect.full.declaredFunctions

class ApiBookTest {
    @Test
    fun `check all RetrofitBooksApi methods are implemented`() {
        val originMethodSignatures = RetrofitBooksApi::class.declaredFunctions
            .map { it.name to it.parameters.map { param -> param.type } }
            .toSet()
        
        val implMethodSignatures = ApiBook::class.declaredFunctions
            .map { it.name to it.parameters.map { param -> param.type } }
            .toSet()

        originMethodSignatures.forEach { signature ->
            assert(implMethodSignatures.contains(signature)) {
                "ApiBook 缺少实现生成接口的方法:${signature.first},请及时补充"
            }
        }
    }
}

业务侧调用

// MainActivity 中调用方式不变
lifecycleScope.launch {
    val response = ApiBook.getBooksList()
    // 处理自定义响应
}

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:57:01