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

使用Moshi转换对象时出现「Not enough information to infer type variable T」错误的排查求助

解决Moshi转换MutableMap时的"Not enough information to infer type variable T"错误

问题核心原因

你遇到的错误完全是因为创建MutableMap的参数化类型时传错了参数数量!Map(包括MutableMap)是键值对结构,Types.newParameterizedType只需要两个类型参数:键的Class和值的Class,但你传入了一堆类(LayerTwoConn、TWeFiState...),这完全不符合Map的泛型定义,Moshi自然无法推断正确的类型变量。

对比你的正常场景:MutableList只需要一个元素类型参数,所以你传CnrScan::class.java是正确的,代码能正常运行。

修复步骤

首先你要明确:你要序列化的layerTwoConn对应的MutableMap的键类型和值类型到底是什么?比如如果你的Map是MutableMap<String, LayerTwoConn>,那参数化类型应该这么创建:

// 假设键是String,值是LayerTwoConn,请根据你的实际业务调整键/值类型
val type: Type = Types.newParameterizedType(
    MutableMap::class.java,
    String::class.java, // 键的类型
    LayerTwoConn::class.java // 值的类型
)
val json = Moshi.Builder().build().adapter(type).toJson(layerTwoConn)

如果你其实是想直接序列化LayerTwoConn对象本身(而不是把它作为Map的值),那根本不需要创建Map的参数化类型,直接用类本身的类型即可:

val json = Moshi.Builder().build().adapter(LayerTwoConn::class.java).toJson(layerTwoConn)

关于LayerTwoConn私有构造方法的说明

当前你执行的是**序列化(toJson)操作,私有构造方法不会影响这个过程——因为序列化只需要读取对象的属性值,不需要创建新实例。但如果后续你需要反序列化(fromJson)**这个类的对象,Moshi就会因为无法调用私有构造方法而报错,这时候你需要给LayerTwoConn添加@JsonClass(generateAdapter = true)注解,让Moshi生成适配的序列化器,或者手动编写JsonAdapter来处理私有构造的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:17:46