0
votes

Que signifient les crochets avant la fonction dans Kotlin?

Que signifient les crochets avant une fonction?

Par exemple:

fun <T> findViewByID(...) {...}

Ici, la partie (TextView) est ce qui me pose problème. Est-ce quelque chose comme un paramètre pour

TextView myTextView = (TextView)findViewById(R.id.tvHello);


1 commentaires

TextView myTextView = (TextView)findViewById(R.id.tvHello); est Java


3 Réponses :


0
votes

C'est un casting.

Cela convertit le résultat de findViewByID en TextView .

Notez qu'avec la dernière API kotlin, ce n'est pas nécessaire. findViewByID a un paramètre de type T et renverra automatiquement un objet du type de vue que vous aimez.

Une fois, lorsque ce code a été écrit, findViewByID une View simple et les appelants devaient le findViewByID dans le type souhaité.


0 commentaires

0
votes

Dans ce cas, les crochets qui contiennent (TextView) avant la fonction sont utilisés pour spécifier le type de ce que vous devez obtenir lorsque vous avez terminé d'exécuter la fonction.

S'il y a une ambiguïté possible sur le type de chose que vous obtenez lorsque vous avez terminé d'exécuter la fonction, vous faites ce qu'on appelle un cast. Dans ce cas, nous convertissons le résultat renvoyé en (TextView).

Pour comprendre le cas le plus élémentaire du casting, je vous suggère de regarder combien de temps / double / float cast en C et Java.


0 commentaires

0
votes

Tout d'abord, un peu d'histoire. findViewById utilisé pour renvoyer simplement View , même si le type de la vue trouvée était plus spécifique, comme un TextView. Donc, si vous vouliez trouver une vue et l'assigner à une variable avec un type spécifique de vue, vous devrez la convertir en ce type de variable.

La diffusion ne modifie pas l'objet sous-jacent. Il indique simplement au compilateur que vous promettez que l'objet sous-jacent est déjà ce type plus spécifique, donc le compilateur vous permettra de le traiter comme le type le plus spécifique et de l'affecter à une variable de ce type plus spécifique.

Votre premier bloc de code est Java. Le nom de la classe entre parenthèses convertit l'expression suivante en une classe spécifique. Dans Kotlin, vous lancez en utilisant as , donc cela ressemblerait à:

myTextView: TextView  = findViewById(R.id.tvHello)

Cependant, dans les versions ultérieures d'Android et dans les bibliothèques de prise en charge, ils ont modifié findViewById pour renvoyer un type générique T qui étend View. Cela permet à Java et Kotlin de convertir implicitement le résultat dans le type de la variable à laquelle vous affectez le résultat. Alors maintenant, vous pouvez simplement utiliser

myTextView: TextView = findViewById(R.id.tvHello) as TextView

et il sera automatiquement converti en TextView pour vous.

Lorsque vous voyez du code comme votre premier bloc de code, il provient probablement de l'ancien code d'avant la modification de findViewById .

Les génériques sont un sujet assez important et la documentation de Kotlin à ce sujet est écrite comme si vous étiez déjà très familier avec les génériques Java. Je recommande donc de lire d'abord les documents Java dessus, même si vous ne connaissez pas vraiment Java. L'explication vous aidera toujours à comprendre ce que font les génériques.


0 commentaires