Android:如何为Kotlin中的所有对象列表创建类型转换器(for Room)

我在我的项目中使用Room作为本地数据库解决方案。 对于某个对象类型的每个列表,我已经添加了类型转换器到项目中,所以类型转换器看起来像这样:

@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 } 

问题只是我有一大堆需要转换的不同类型的List,所以目前我只是复制这个代码的每一个类型。 我想使用泛型,但到目前为止还没有能够弄清楚如何去做。

例如使用像这样的东西:

 @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 } 

不工作,并导致Android Studio的编译错误给我一个错误告诉: 类型转换器必须是公开的

任何人的想法如何我可以使用泛型为我的房间TypeConverter?

我只是测试了这一点,似乎是做你想要的基础。 你可以根据自己的需要调整函数,但是这应该会让你继续:参考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 }