Добрый день! Я только начинаю изучать Kotlin, да и программирование в принципе. Помоги пожалуйста разобраться в следующем вопросе:
У меня в синглтоне есть два списка:
private var noteList = mutableListOf<Note>()
private var noteComment = mutableListOf<Comment>()
для добавления данных в эти списки я создаю параметризированную функцию:
fun <T : Identifiable> add (obj: T): MutableList<T> {
var objList = mutableListOf<T>()
objList.add(obj)
return objList
}
Вопрос в следующем: я не понимаю как мне присвоить результат работы функции либо в список noteList, либо в список noteComment.
Помоги пожалуйста!!!Код
Мне кажется, что код в топикстартовом сообщении не был отформатирован при помощи markdown как код, поэтому символы “больше” и “меньше” съелись и не видны, из-за этого ничего непонятно.
Параметры функций и параметры шаблонов - это разные сущности. Для того, чтобы их записывать в тексте программы используется разный синтаксис. Определение функции записано неправильно, T - это тип параметра функции с именем Obj. А надо параметризировать саму функцию, это другое.
Если функция должна принять объект как параметр функции, и затем поместить этот объект в один из двух списков, то для этого не обязательно (не нужно) создавать внутри функции третий список.
Функция должна добавить объект в список. При создании функции я не знаю как объект будет добавляться, соответственно не могу сказать в какой список нужно его добавить.
Моя логика была такая: создаю новый список в теле функции куда добавляю объект, и потом этот список как результат работы функции добавляю в тот или иной список ( в зависимости от того какой объект)
Можно это всё без шаблонов сделать. Определить тип объекта можно через RTTI, рефлексию, или как там это в котлине называется, и затем условием (или оператором switch) поместить куда надо.
when (obj) {
is Note -> noteList.Add(obj)
is Comment -> commentList.Add(obj)
}
В некоторых языках существует “специализация функций” (или классов), вдруг она в котлине есть? Тогда под один шаблон попробовать написать две разных специализации, каждая из которых будет помещать в свой список.
Но зачем это всё - пока непонятно.