小编Cit*_*sO2的帖子

通用 List<T:Enum> 的 Moshi 自定义适配器返回 List<List<T:Enum>> 而不是 List<T:Enum>

(也在此处打开了一个问题:https : //github.com/square/moshi/issues/768但也被要求打开一个 stackoverflow 问题)我正在编写一个通用适配器来转换带有枚举值列表的 json 字符串。当列表包含不可用的枚举值时,枚举的标准适配器会引发异常。我想创建一个简单地跳过未知枚举值而不是抛出异常的适配器。我部分成功了,但由于某种原因,转换的对象不是 aList<Enum>而是 a List<List<Enum>>

这是我想出的适配器:

package com.mytestcompany.appname.utils

import com.squareup.moshi.*
import kotlin.reflect.KClass

class SkipNotFoundEnumInEnumListAdapter<T : Enum<T>>(enumType: KClass<T>) : JsonAdapter<List<T>>(){
    val jsonNameToEnum = HashMap<String,T>()
    val enumToJsonName = HashMap<T,String>()

    init{
        val enumConstants =  enumType.java.enumConstants
        for(enumConstant in enumConstants){
            val constantName = enumConstant.name
            val jsonName = enumType.java.getField(constantName).getAnnotation(Json::class.java)

            val lookupName = jsonName?.name ?: constantName
            jsonNameToEnum[lookupName] = enumConstant
            enumToJsonName[enumConstant] = lookupName
        }
    }

    @FromJson
    override fun fromJson(jsonReader: JsonReader): List<T>{
        val list = ArrayList<T>()
        while(jsonReader.hasNext()){
            val jsonNameValue …
Run Code Online (Sandbox Code Playgroud)

generics kotlin moshi

3
推荐指数
1
解决办法
3285
查看次数

标签 统计

generics ×1

kotlin ×1

moshi ×1