Создать метод с общим параметром для повторных действий

У меня есть следующие методы для моего кода:

fun saveArticles(data: JSONArray) { var active = String() for (i in 0..data.length().minus(1)) // create string val articles = Select.from(Article::class.java).list() val iterator = articles.iterator() while (iterator.hasNext()) { val article = iterator.next() as Article if (!active.contains(Regex(article.id.toString()))) article.delete() } } fun saveDossiers(data: JSONArray) { var active = String() for (i in 0..data.length().minus(1)) // create string val dossiers = Select.from(Dossier::class.java).list() val iterator = dossiers.iterator() while (iterator.hasNext()) { val dossier = iterator.next() as Dossier if (!active.contains(Regex(dossier.id.toString()))) dossier.delete() } } fun saveVideos(data: JSONArray) { var active = String() for (i in 0..data.length().minus(1)) // create string val videos = Select.from(Video::class.java).list() val iterator = videos.iterator() while (iterator.hasNext()) { val video = iterator.next() as Video if (!active.contains(Regex(video.id.toString()))) video.delete() } } 

Как вы можете видеть, все методы делают то же самое. Единственное отличие – тип класса объекта, над которым я сейчас работаю. Могу ли я каким-то образом создать единый метод с параметром типа Class, и в зависимости от изменения типа класс, который мне нужно сработать? Что-то вроде этого:

 fun saveVideos(data: JSONArray, type: Class) { var active = String() for (i in 0..data.length().minus(1)) // create string val list = Select.from(type).list() val iterator = list.iterator() while (iterator.hasNext()) { val item = iterator.next() as type if (!active.contains(Regex((item as type).id.toString()))) item.delete() } } 

Вам нужно извлечь интерфейс и использовать общий набор.

 interface Blabla { fun delete() val id: Int } inline fun <reified T : Blabla>saveVideos(data: JSONArray) { var active = String() for (i in 0..data.length().minus(1)) // create string val list = Select.from(T::class.java).list() val iterator = list.iterator() while (iterator.hasNext()) { val item = iterator.next() as T if (Regex(item.id.toString()) !in active) item.delete() } } 

Это должно сработать.

Кроме того, я настоятельно рекомендую вам использовать библиотеку коллекции Kotlin, например.

 inline fun <reified T : Blabla>saveVideos(data: JSONArray) { val active = "" for (i in 0 until data.length()) {} // create string val list = Select.from(T::class.java).list() list .map { it as T } .filter { Regex(it.id.toString()) !in active } .forEach { it.delete() } } 

И вы даже можете заменить forEach { it.delete() } на forEach(T::delete)