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

如何将带泛型的内联functionA包装为可Mock的非内联函数?

Kotlin内联函数包装的类型传递解决方案

针对你遇到的内联函数无法Mock、需要包装成非内联函数但不知道传递类型参数的问题,直接用类型强转就能解决,代码实现如下:

fun <T> functionAWrap(string: String, clazz: Class<T>): T {
    // 调用原内联函数时指定Any类型,再用传入的Class对象强转为目标类型T
    return clazz.cast(functionA<Any>(string))
}

这样写的逻辑很清晰:原内联函数functionA<Any>会返回任意类型的实例,通过clazz.cast()方法可以安全地将其转换为你传入的clazz对应的类型T,完全适配你期望的调用方式:

functionAWrap(testString, AClass::class.java)

如果原functionA的内部实现依赖更具体的类型信息,也可以借助Kotlin反射来传递类型:

import kotlin.reflect.KClass
import kotlin.reflect.full.createType

fun <T> functionAWrap(string: String, clazz: Class<T>): T {
    val kClass: KClass<T> = clazz.kotlin
    // 利用KClass创建类型信息,传递给原函数(如果原函数支持的话)
    return functionA(string, type = kClass.createType())
}

不过这种写法需要原functionA支持接收类型参数,要是原函数只依赖reified T的编译期类型信息,第一种强转的写法就足够简洁好用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:25:09