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

Kotlin中如何在reified泛型函数中获取请求对象的token值?

解决方法

方案一:定义通用接口(推荐)

这是最规范、扩展性最好的做法,通过接口约束所有带token的请求类:

  1. 先定义一个包含token属性的接口:
interface TokenBearer {
    val token: String
}
  1. 让你的MyRequest类实现这个接口:
data class MyRequest(override val token: String) : TokenBearer
  1. 修改callMyRequest函数的泛型约束,限定Y必须是TokenBearer的子类:
private inline fun <reified T, reified Y : TokenBearer> callMyRequest(request: Y): ResponseEntity<T> {
    val headers = HttpHeaders()
    headers.add(CONTENT_TYPE, "application/json")
    headers.add(AUTHORIZATION, request.token) // 现在可以直接访问token属性了

    // 其他业务逻辑
}

后续如果有其他带token的请求类,只要实现TokenBearer接口,就能直接传入这个函数,不需要修改函数内部逻辑。

方案二:类型检查与转换(临时应急)

如果不想修改现有类结构,可以通过类型判断来获取token,但这种方式扩展性差,新增请求类型时需要修改函数代码:

private inline fun <reified T, reified Y> callMyRequest(request: Y): ResponseEntity<T> {
    val headers = HttpHeaders()
    headers.add(CONTENT_TYPE, "application/json")
    
    val token = when (request) {
        is MyRequest -> request.token
        // 可以添加其他带token的请求类型分支
        else -> throw IllegalArgumentException("传入的请求对象不包含token字段")
    }
    
    headers.add(AUTHORIZATION, token)

    // 其他业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:30:46