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 } 
  • ¿Cómo convierto un Int en una cadena en Kotlin?
  • ¿Cómo declarar e inicializar un MutableSet en Kotlin?
  • ¿Por qué la verificación de igualdad referencel devuelve verdadero cuando la reference es diferente?
  • Motivo de la precedencia de los operadores con un tipo en el lado derecho
  • ¿Es posible el cruce de intersecciones en Kotlin?
  • IllegalArgumentException: savedInstanceState especificado como no nulo es nulo
  • Kotlin IllegalStateException: recurso no encontrado en classpath: kotlin / .kotlin_string_table
  • ¿Cómo uso AnkoComponent dentro de FirebaseRecyclerAdapter?
  • ¿Por qué == e iguales producen resultados diferentes?
  • Cambia una list para mapear en Kotlin mientras personalizas esta conversión
  • ¿Cómo puedo crear una instancia de un object usando valores de parameters de constructor pnetworkingeterminados en Kotlin?