Котлин - Дженерики

Как и 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».

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

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>. Взгляните на основной метод, где мы динамически определили его значение при запуске, доказав тип значения при создании объекта этого класса. Вот как обобщенные типы интерпретируются компилятором Kotlin. Мы получим следующий вывод в браузере, как только запустим этот код на нашей площадке для кодирования.

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

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

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

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

I am getting called with the value 10
I am getting called with the value 10.0
genericsExample@28d93b30
genericsExample@1b6d3586