Intereting Posts
Как объявить и инициализировать MutableSet в Котлине? Объект базы данных Singleton с параметризованной инициализацией при запуске? Как правильно переопределить метод, возвращающий экземпляр родового класса в Котлин Вытягивание данных из API с помощью okHTTP и GSON В чем разница между нормальным классом и классом данных в котлине Напишите исходный HTML-код внутри kotlinx.html DSL Возможно ли сделать фон макета активности прозрачным в kotlin android Котлинский эквивалент «экспортного дефолта» в JavaScript Как заменить :: new в котлин? Прочитайте CSV-строку в Kotlin Сохранить / Восстановить состояние NestedScrollView с несколькими RecyclerViews и другими видами Как распространять исключения из задания? Настройка проекта kotlin с градиентом Как создать массив Java в Kotlin для @PropertySource? Преобразует ли файл Kotlin в java, добавив к нему java-код и вернувшись обратно в Kotlin так же, как добавление кода непосредственно в файл Kotlin?

Android: Как сделать преобразователи типов (для комнаты) универсальными для всех Список объектов в Котлине

Я использую 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 } 

Проблема только в том, что у меня есть целая группа Список различных типов, которые нужно преобразовать, поэтому в настоящее время я просто копирую этот код для каждого типа. Я бы хотел использовать дженерики, но пока не смог понять, как это сделать.

Например, используя что-то вроде:

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

Solutions Collecting From Web of "Android: Как сделать преобразователи типов (для комнаты) универсальными для всех Список объектов в Котлине"

Я просто проверял это, кажется, делает базу для того, что вы искали. До вас, чтобы настроить функцию на ваши нужды, но это должно вас заставить: Ссылка 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 }