Как обязать Generic наследоваться от интерфейса

«Как обязать Generic наследоваться от интерфейса» — вопрос из категории Kotlin, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kotlin можно ограничить Generic параметр интерфейсом с помощью where или :. Пример:

interface MyInterface {
    fun doSomething()
}

class MyClass<T> where T : MyInterface {
    fun process(item: T) {
        item.doSomething()
    }
}

// Или альтернативный синтаксис:
class AnotherClass<T : MyInterface>(val item: T)

Ключевые моменты:

  1. Ограничение гарантирует, что тип T реализует MyInterface
  2. Можно использовать несколько ограничений через where T : A, T : B
  3. Внутри класса доступны все методы интерфейса для типа T

Пример использования:

class Implementation : MyInterface {
    override fun doSomething() = println("Working")
}

val obj = MyClass<Implementation>()