Какой опыт работы с Generics

«Какой опыт работы с Generics» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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) }