Ответ
Generics в Kotlin/Java позволяют создавать обобщённые классы, интерфейсы и методы, повышая безопасность типов и уменьшая дублирование кода.
Основные преимущества:
- Type safety – компилятор проверяет типы, предотвращая
ClassCastException. - Reusability – один метод/класс может работать с разными типами.
Пример с List:
val stringList: List<String> = listOf("a", "b") // Только строки
val intList: List<Int> = listOf(1, 2) // Только числа
Собственный Generic-класс:
class Box<T>(val item: T) {
fun getItem(): T = item
}
val stringBox = Box("Hello") // Box<String>
val intBox = Box(42) // Box<Int>
Ограничения (where в Kotlin, extends в Java):
fun <T : Comparable<T>> sort(list: List<T>) { ... } // T должен реализовывать Comparable
Вариантность (in, out):
out– ковариантность (производитель, только возвращаетT).in– контравариантность (потребитель, только принимаетT).
Пример:
interface Producer<out T> { fun produce(): T }
interface Consumer<in T> { fun consume(item: T) }