Kotlin - Génériques

Comme Java, Kotlin fournit un ordre supérieur de typage de variables appelé génériques. Dans ce chapitre, nous apprendrons comment Kotlin implémente les génériques et comment, en tant que développeur, nous pouvons utiliser les fonctionnalités fournies dans la bibliothèque de génériques. En ce qui concerne la mise en œuvre, les génériques sont assez similaires à Java, mais le développeur Kotlin a introduit deux nouveaux mots-clés“out” et “in” pour rendre les codes Kotlin plus lisibles et plus faciles pour le développeur.

Dans Kotlin, une classe et un type sont des concepts totalement différents. Comme dans l'exemple, List est une classe dans Kotlin, alors que List <String> est un type dans Kotlin. L'exemple suivant montre comment les génériques sont implémentés dans Kotlin.

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

Dans le code ci-dessus, nous avons déclaré un «entier» et plus tard, nous avons attribué cette variable à une variable numérique. Cela est possible parce que «Int» est une sous-classe de la classe Number, par conséquent la conversion de type se produit automatiquement à l'exécution et produit la sortie comme «1».

Apprenons quelque chose de plus sur les génériques à Kotlin. Il est préférable d'opter pour un type de données générique chaque fois que nous ne sommes pas sûrs du type de données que nous allons utiliser dans l'application. Généralement, dans Kotlin, les génériques sont définis par<T>où «T» signifie modèle, qui peut être déterminé dynamiquement par le compilateur Kotlin. Dans l'exemple suivant, nous verrons comment utiliser des types de données génériques dans le langage de programmation 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)
   }
}

Dans le morceau de code ci-dessus, nous créons une classe avec un type de retour générique, qui est représenté par <T>. Jetez un œil à la méthode main, où nous avons défini dynamiquement sa valeur lors de l'exécution en prouvant le type de valeur, tout en créant l'objet de cette classe. C'est ainsi que les génériques sont interprétés par le compilateur Kotlin. Nous obtiendrons la sortie suivante dans le navigateur, une fois que nous aurons exécuté ce code dans notre base de codage.

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

Lorsque nous voulons attribuer le type générique à l'un de ses super-types, nous devons utiliser le mot-clé «out», et lorsque nous voulons attribuer le type générique à l'un de ses sous-types, nous devons utiliser «in» mot-clé. Dans l'exemple suivant, nous utiliserons le mot-clé «out». De même, vous pouvez essayer d'utiliser le mot-clé «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)
   }
}

Le code ci-dessus donnera la sortie suivante dans le navigateur.

I am getting called with the value 10
I am getting called with the value 10.0
[email protected]
[email protected]