首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Moshi找不到我用Kotlin为参数化类型编写的自定义适配器

Moshi找不到我用Kotlin为参数化类型编写的自定义适配器
EN

Stack Overflow用户
提问于 2018-07-27 07:13:34
回答 1查看 848关注 0票数 2

我有一个用于Moshi的自定义JSON适配器,用于显示如下所示的字节字符串列表。

代码语言:javascript
代码运行次数:0
运行
复制
@Retention(RUNTIME)
@JsonQualifier
annotation class HexString

object ByteStringListAdapter {
  @ToJson fun toJson(@HexString byteStrings: List<@JvmSuppressWildcards ByteString>): List<String> {
    return byteStrings.map { it.hex() }
  }

  @FromJson @HexString fun fromJson(json: List<String>): List<@JvmSuppressWildcards ByteString> {
    return json.map { ByteString.decodeHex(it) }
  }
}

fun main(args: Array<String>) {
  val moshi = Moshi.Builder()
      .add(ByteStringListAdapter)
      .build()
  val byteStringListAdapter = moshi.adapter<List<ByteString>>(
      Types.newParameterizedType(List::class.java, ByteString::class.java), HexString::class.java)
}

尽管我已经在这里的main中正确注册了它,但使用java.lang.IllegalArgumentException: No @ToJson adapter for java.util.List<okio.ByteString> annotated [@HexString()]运行此程序仍会失败。

为什么Moshi找不到我已注册的@HexString List<ByteString>适配器

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-27 07:13:34

toJson函数需要对参数使用@JvmSuppressWildcards

代码语言:javascript
代码运行次数:0
运行
复制
@ToJson fun toJson(@HexString byteStrings: List<@JvmSuppressWildcards ByteString>): List<String> {
  return byteStrings.map { it.hex() }
}

如果没有它,Moshi就会看到List<? extends ByteString>,并且无法匹配类型来查找适配器。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51548692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档