J'ai une arrayliste code> code> et j'utilise un itérateur pour le traverser. J'ai besoin de savoir quel type d'objet est suivant: merci p> p> p>
6 Réponses :
Object o = vehicleIterator.next(); if (o instanceof Car) // Is a car if (o instanceof Bus) // ...
Vous pouvez toujours utiliser getclass () code> au cas où vous ne saviez pas exactement que vous souhaitez attendre. P>
Un moyen est d'utiliser la méthode Cependant, si vous vérifiez explicitement le type de classe, il y a presque toujours un meilleur moyen d'écrire votre code à l'aide de polymorphisme ou d'un autre principe OO. Code qui vérifie le type de tel ou utiliser sans avoir plus d'informations sur ce que vous faites avec Le type, je suggérerais que vous ayez un type de base getclass () code>.
instance de code>, devriez certainement être modifié si des types supplémentaires de voitures sont ajoutés. P>
véhicule code> que
voiture code>,
bus code>, etc. Tout hériter de. Donnez à vos véhicules les méthodes dont ils ont besoin (remplacez ceux dont vous avez besoin), appelez simplement ces méthodes dans votre boucle. P> p>
Tout d'abord, obtenez des génériques là-bas. Ils ont été en Java depuis 2004. Même la version de Java SE qui les a introduites a terminé sa période de fin de vie. P>
(comme @Finnw souligne, j'oublisais des pauvres vieux Java Me. Si vous devez utiliser Java Me, vous devrez alors éviter des génériques et jeté (mais pas Utilisation d'une instance code> code> et de casting a tendance à indiquer em> mauvaise conception. Il serait probablement préférable de placer dans la liste un objet avec une interface que le code client peut utiliser sans tests et implémentations qui correspondent à différents comportements pour chaque cible "réelle" de la liste. "Chaque problème en informatique peut être résolu en ajoutant un autre niveau d'indirection" ["... sauf trop de niveaux d'indirection."] P> instance de code> souvent) jusqu'à ce qu'il soit (y compris les appareils déployés) en 2004.) P>
Je ne sais pas à propos de cette question, mais parfois des génériques sont omis des questions Java, car elles ciblent J2ME (mais l'affiche a oublié de l'étiqueter comme telle) ou dans des problèmes de devoirs (car le collège évite les génériques pour simplifier la langue à des fins pédagogiques. .)
Une autre possibilité est qu'il utilise une bibliothèque tierce partie qui n'a pas été mise à jour avec des génériques. Presque tous les développeurs Java savent comment créer des collections génériques en maintenant, mais tout le monde ne connaît pas à l'aide d'utiliser des caractères génériques (par exemple itérateur > MyLeTraRator = mylegacyCollection.iterator () code>) pour interfacer avec le code hérité.
@finnw j'ai oublié de pauvres vieux java moi. (Dans tous les cas, vous ne voulez toujours pas utiliser instance de code> très souvent.)
Puisque vous voulez la classe de l'élément suivant em> plutôt que celui actuel, envisagez d'utiliser un Itérateur sur Mise en œuvre. Vous pouvez utiliser une condition de boucle comme: p>
Generics canette de grande aide ici. Vous pouvez ensuite utiliser instance de code> pour déterminer la voiture du bus. P>