Учебники

Котлин — Дженерикс

Как и Java, Kotlin обеспечивает более высокий порядок типизации переменных, называемый Generics. В этой главе мы узнаем, как Kotlin реализует Generics и как разработчик может использовать эти функции, предоставляемые в библиотеке generics. С точки зрения реализации, дженерики очень похожи на Java, но разработчик Kotlin ввел два новых ключевых слова «out» и «in», чтобы сделать коды Kotlin более читабельными и удобными для разработчика.

В Kotlin класс и тип — это совершенно разные понятия. Согласно примеру, List является классом в Kotlin, тогда как List <String> является типом в Kotlin. В следующем примере показано, как дженерики реализованы в Kotlin.

fun main(args: Array<String>) {
   val integer: Int = 1
   val number: Number = integer
   print(number)
}

В приведенном выше коде мы объявили одно «целое число», а затем мы присвоили эту переменную числовой переменной. Это возможно, потому что «Int» является подклассом класса Number, поэтому преобразование типа происходит автоматически во время выполнения и выдает результат как «1».

Давайте узнаем больше о дженериках в Котлине. Лучше использовать общий тип данных, когда мы не уверены в типе данных, который мы будем использовать в приложении. Обычно в Kotlin дженерики определяются как <T>, где «T» обозначает шаблон, который может быть определен динамически компилятором Kotlin. В следующем примере мы увидим, как использовать универсальные типы данных в языке программирования Kotlin.

Live Demo

fun main(args: Array<String>) {
   var objet = genericsExample<String>("JAVA")
   var objet1 = genericsExample<Int>(10)
}
class genericsExample<T>(input:T) {
   init {
      println("I am getting called with the value "+input)
   }
}

В приведенном выше фрагменте кода мы создаем один класс с универсальным типом возвращаемого значения, который представлен как <T> . Взгляните на метод main, где мы динамически определяем его значение во время выполнения, проверяя тип значения при создании объекта этого класса. Вот как дженерики интерпретируются компилятором Kotlin. Мы получим следующий вывод в браузере, как только запустим этот код в нашем коде.

I am getting called with the value JAVA
I am getting called with the value 10

Когда мы хотим назначить универсальный тип любому из его супертипа, нам нужно использовать ключевое слово «out», а когда мы хотим назначить универсальный тип любому из его подтипа, тогда нам нужно использовать «in» ключевое слово. В следующем примере мы будем использовать ключевое слово «out». Точно так же вы можете попробовать использовать ключевое слово «in».

Live Demo

fun main(args: Array<String>) {
   var objet1 = genericsExample<Int>(10)
   var object2 = genericsExample<Double>(10.00)
   println(objet1)
   println(object2)
}
class genericsExample<out T>(input:T) {
   init {
      println("I am getting called with the value "+input)
   }
}

Приведенный выше код выдаст следующий вывод в браузере.