Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 在Kotlin中使用TypeAdapter实现TypeAdapterFactory大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用Kotlin语言为我的 android项目实现一些特定的GSON TypeAdapter.

我面临的问题是编译错误而无法推断类型:类型推断失败:’T’无法捕获’in(T..T?’.类型参数的上限’Enum< T>‘无法满足捕捉’投影’

代码如下:

class smartEnumTypeAdapterFactory(fallBACkKey: String) : TypeAdapterFactory {

     private val fallBACkKey = fallBACkKey.toLowerCase(Locale.US)

     override fun <T : Any> create(gson: Gson?,type: TypeToken<T>): TypeAdapter<T>? {
        val rawType = type.rawType
        return if (!rawType.isEnum) null else smartEnumTypeAdapter(rawTypE)
     }

     class smartEnumTypeAdapter<T : Enum<T>>(classOfT: Class<T>) : TypeAdapter<T>() {

        override fun write(out: JsonWriter?,value: T) {
           TODO("not implemented")
        }

        override fun read(`in`: JsonReader?): T {
           TODO("not implemented")
        }
     }
  }

我想要classOfT的原因:Class< T>因为TypeAdapter的参数不在此问题的上下文中.

解决方法

是不可能的,因为您要覆盖的方法(TypeFactory.create)没有上限(在Kotlin中转换为< T:Any>).在您的create方法中,T不是
保证是Enum< T> (因此,无法将其作为参数传递给适配器).

您可以做的只是删除适配器类中的上限并将其保密,以确保只有您的工厂可以创建它的实例(如果类型是枚举,工厂已经验证).

class smartEnumTypeAdapterFactory(fallBACkKey: String) : TypeAdapterFactory {

    private val fallBACkKey = fallBACkKey.toLowerCase(Locale.US)

    override fun <T> create(gson: Gson?,type: TypeToken<T>): TypeAdapter<T>? {
        val rawType = type.rawType
        return if (!rawType.isEnum) null else smartEnumTypeAdapter(rawTypE)
    }

    private class smartEnumTypeAdapter<T>(classOfT: Class<in T>) : TypeAdapter<T>() {

        override fun write(out: JsonWriter?,value: T) {
            TODO("not implemented")
        }

        override fun read(`in`: JsonReader?): T {
            TODO("not implemented")
        }
    }
}

(classOfT是一个Class< in T>因为TypeToken.rawType()返回一个Class<?super T>)

大佬总结

以上是大佬教程为你收集整理的android – 在Kotlin中使用TypeAdapter实现TypeAdapterFactory全部内容,希望文章能够帮你解决android – 在Kotlin中使用TypeAdapter实现TypeAdapterFactory所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。