J'essaie d'implémenter un TypeAdapter GSON particulier en langage Kotlin pour mon projet Android.Implémentation de TypeAdapterFactory avec TypeAdapter dans Kotlin
Le problème que je suis confronté est erreur de compilation avec incapacité à déduire le type: Type inference failed: 'T' cannot capture 'in (T..T?'. Type parameter has an upper bound 'Enum<T>' that cannot be satisfied capturing 'in' projection
Le code est le suivant:
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")
}
}
}
La raison pour laquelle je veux avoir classOfT: Class<T>
en tant que paramètre pour TypeAdapter est hors de contexte de ce problème.
Ceci est un cas vraiment difficile ... Avez-vous essayé la mise en œuvre de cette chose en Java? Parce que vous pourriez alors vous convertir à Kotlin et voir si cela fonctionne, mais jusqu'ici je n'ai pas réussi à travailler dans les deux langues. – Robin