Kotlin - Genéricos

Al igual que Java, Kotlin proporciona un orden superior de escritura de variables denominadas genéricas. En este capítulo, aprenderemos cómo Kotlin implementa Generics y cómo, como desarrollador, podemos usar esas funcionalidades proporcionadas dentro de la biblioteca de genéricos. En cuanto a la implementación, los genéricos son bastante similares a Java, pero el desarrollador de Kotlin ha introducido dos nuevas palabras clave“out” y “in” para hacer que los códigos Kotlin sean más legibles y fáciles para el desarrollador.

En Kotlin, una clase y un tipo son conceptos totalmente diferentes. Según el ejemplo, List es una clase en Kotlin, mientras que List <String> es un tipo en Kotlin. El siguiente ejemplo muestra cómo se implementan los genéricos en Kotlin.

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

En el código anterior, hemos declarado un "entero" y luego hemos asignado esa variable a una variable numérica. Esto es posible porque "Int" es una subclase de la clase Number, por lo que la conversión de tipo ocurre automáticamente en tiempo de ejecución y produce la salida como "1".

Aprendamos algo más sobre los genéricos en Kotlin. Es mejor optar por tipos de datos genéricos siempre que no estemos seguros sobre el tipo de datos que vamos a utilizar en la aplicación. Generalmente, en Kotlin los genéricos se definen por<T>donde "T" significa plantilla, que puede ser determinada dinámicamente por el cumplidor de Kotlin. En el siguiente ejemplo, veremos cómo utilizar tipos de datos genéricos en el lenguaje de programación 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)
   }
}

En el fragmento de código anterior, estamos creando una clase con un tipo de retorno genérico, que se representa como <T>. Eche un vistazo al método principal, donde hemos definido dinámicamente su valor en la ejecución probando el tipo de valor, mientras creamos el objeto de esta clase. Así es como el compilador Kotlin interpreta los genéricos. Obtendremos el siguiente resultado en el navegador, una vez que ejecutemos este código en nuestro campo de codificación.

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

Cuando queremos asignar el tipo genérico a cualquiera de sus supertipos, entonces necesitamos usar la palabra clave "out", y cuando queremos asignar el tipo genérico a cualquiera de sus subtipos, necesitamos usar "in" palabra clave. En el siguiente ejemplo, usaremos la palabra clave "out". Del mismo modo, puede intentar utilizar la palabra clave "en".

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

El código anterior producirá el siguiente resultado en el navegador.

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