Как использовать дженерики в функции расширения Kotlin

#android #kotlin #generics #kotlin-android-extensions

#Android #kotlin #дженерики #kotlin-android-расширения

Вопрос:

У меня было 2 функции, которые выполняют в основном одно и то же, поэтому я подумал создать функцию расширения.

Проблема в том, что мне нужно извлечь данные каждого класса, чтобы получить правильный результат, я подумал о создании универсальной функции, и внутри этой функции решить, к какому члену класса обращаться внутри when инструкции.

Но когда я пытаюсь вызвать T внутри инструкции when, я получаю Type parameter 'T' is not an expression

Что я делаю не так?

Моя функция:

 fun <T: Any> List<T>.extractWithSepreation(errorString: String): String {
    var errorString = "There is no available $errorString"

    if (this.isEmpty()) {
        return errorString
    }
    
    errorString = ""
    this.forEachIndexed { index, item ->
        when(T)
    }

}
  

Ответ №1:

Сообщение об ошибке в значительной степени говорит само за себя. T не является выражением, поэтому его нельзя использовать внутри when(...) . T просто ссылается на класс item List .

Разве вы не имели в виду использование чего-то вроде:

 when(item) {
   is ClassA -> doSomething()
   is ClassB -> doSomethingElse()
}
  

?

Комментарии:

1. На самом деле это именно то, что я имел в виду, я был настолько увлечен этим, что даже не подумал о простейшем решении

2. Не стесняйтесь принять ответ, если он вам помог @Masksway