Android: Cómo hacer convertidores de tipo (para Habitación) generics para todos Lista de objects en Kotlin

Estoy usando Room como la solución de database local en mi proyecto. Para cada list de cierto tipo de object, he agregado convertidores de tipo al proyecto, por lo que el convertidor de tipo se vería así:

@TypeConverter fun convertListToString(video: List<VideoType>): String { val videoArray = arrayOfNulls<VideoType>(video.size) for (i in 0..video.size - 1) { videoArray[i] = video[i] } var str = "" val gson = Gson() for (i in videoArray.indices) { val jsonString = gson.toJson(videoArray[i]) str = str + jsonString if (i < videoArray.size - 1) { str = str + strSeparator } } return str } @TypeConverter fun convertStringToList(videoString: String): List<VideoType> { val videoArray = videoString.split(strSeparator.toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() val videos = ArrayList<VideoType>() val gson = Gson() for (i in 0 until videoArray.size - 1) { videos.add(gson.fromJson(videoArray[i], VideoType::class.java)) } return videos } 

El único problema es que tengo una gran cantidad de lists de diferentes types que deben convertirse, por lo que actualmente solo estoy copyndo este código para cada tipo. Me gustaría usar medicamentos generics, pero hasta ahora no he podido encontrar la manera de hacerlo.

Por ejemplo, usando algo como:

 @TypeConverter inline fun <reified T> convertStringToList(string: String): List<T> { val objectArray = string.split(strSeparator.toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() val objects = ArrayList<T>() val gson = Gson() for (i in 0 until objectArray.size - 1) { objects.add(gson.fromJson(objectArray[i], T::class.java)) } return objects } 

no funciona y causa un error de compilation con Android Studio que me da un error al decir: los convertidores de tipo deben ser públicos

¿Alguien tiene una idea de cómo puedo usar generics para mi Room TypeConverter?

Acabo de probar esto, parece hacer la base de lo que estarías buscando. Depende de ti ajustar la function a tus necesidades, pero eso debería ayudarte: Referencia https://kotlinlang.org/docs/reference/generics.html#generic-functions

 fun test() { val list1 = listOf("1", "2") val list2 = listOf(1, 2, 3) list1.convertToString() list2.convertToString() } fun List<Any>.convertToString(): String { var result = "" val gson = Gson() for (i in 0.. size - 1) { result += gson.toJson(get(i), get(i).javaClass) } return result } 
  • Estructura de Android Studio Package 2.2 RC2
  • Crea una aplicación de Android escrita en Kotlin usando el sistema de compilation Buck
  • Cómo implementar un reciclador de carga perezosa. Adaptador de vista como el reciclador de reino. Ver el adaptador usando kotlin.
  • ¿Qué significa .indices en kotlin?
  • ¿Cómo se hace que Jackson use los parameters pnetworkingeterminados de Kotlin para los valores perdidos?
  • NoClassDefFoundError en time de ejecución
  • Problemas de configuration de Kotlin Room en Android Studio
  • ¿Cuáles son las palabras key reservadas en Kotlin?
  • ¿Cómo probar una class con un oyente anónimo que se establece dentro de una function?
  • ¿Debo usar la class de datos incluso si implemento todo hashCode (), equals () y toString ()?
  • Error de comstackdor interno de Android Studio kaptDebugKoltin