Le code suivant est mentionné dans les didacticiels Java :-( HTTPS : //docs.oracle.com/javase/tatutorial/java/generics/whie.html ) Le casting dans la dernière ligne suggère que list.get (0) ne retourne pas une chaîne. Maintenant, puisque la liste n'a pas été déclarée avec un type de données, elle peut prendre n'importe quel objet. J'ai donc supposé que list.get (0) renvoie un type d'objet. P> mais quand je vérifie Pourquoi est alors le casting explicite requis. S'il vous plaît, expliquez. p> p> list.get.get (0) instanceOf string code> -> Il revient vrai. P>
3 Réponses :
Le casting dans la dernière ligne suggère que List.get (0) ne renvoie pas une chaîne. p>
c'est inexact. Si l'objet retourné
n'était pas strong> a chaîne code>, la coulée n'aurait pas été possible. En d'autres termes, vous ne pouvez lancer que quelque chose à
string code> si quelque chose est une chaîne code> code>. Essayez de caster autre chose, vous verrez: P>
Object l = list.get(0); String s = l;
donc j'ai supposé que list.get (0) renvoie un type d'objet. P> blockQuote>
Oui, c'est. P>
mais quand je check list.get (0) InstanceOf String -> Il retourne true. p> blockQuote>
Oui, il devrait renvoyer vrai strud> parce que l'élément d'index
0 code> de la liste
code>
est une chaîne code> fort>. p>
Pourquoi est alors le casting explicite requis? P> blockQuote>
C'est nécessaire simplement parce que la liste contient code> (code> S et non tous les objets
de la liste est garanti pour être une chaîne code>. La fonte explicite est nécessaire pour que vous puissiez attribuer la référence de
list.get.get.get (0) code> à
s code> (variable de type
chaîne code>). p>
Cette réponse couvre les différentes parties de la question de l'OP, mais une petite addition: les génériques peuvent rendre cela un peu plus simple. La liste peut être définie pour contenir code> string code>, comme ceci: Liste
get () code> ne nécessitera pas de couler, vous pouvez donc le faire:
string s = list.get (0); code>
Merci. Fwiw En général, je ne fais aucune hypothèse sur ce que OP ne sait pas ou ne sait pas. :)
@kaan bien je vois. assez juste et une bonne raison aussi tbh. Je n'aurais pas dû supposer ... :).
Merci les gars! vraiment apprécier la façon dont vous expliquez :)
La liste de liste Depuis votre liste = nouvelle arraylist (); code> est un type non climatisé (que vous souhaitez éviter), ce qui signifie qu'il peut prendre tout
objet code>. p>.
code> contient n'importe quel objet
objet code> s,
list.get.get.get (0); code> peut seulement savoir qu'il renvoie un objet
code> et ne sait pas que l'élément à 0 est en fait une chaîne
code>. Puisque ce n'est pas savoir em> que c'est vraiment un
string code> Le compilateur vous avertit que vous effectuez une création non cochée de
objet code> à
Chaîne code>. p>
list.get (0) InstanceOf String CODE> renvoie true car il s'agit d'un contrôle d'exécution que l'élément à 0 est en fait une chaîne
p>. P>.
Ce qui s'est passé lorsque vous ajouterez
list.add (1000L); code>, il sera compilé sans aucun problème, mais il sera échoué au temps d'exécution en casting à la chaîne