9
votes

Comment puis-je déterminer le type d'objet d'une arracheList Itérateur reviendra ensuite?

J'ai une arrayliste et j'utilise un itérateur pour le traverser. J'ai besoin de savoir quel type d'objet est suivant: xxx

merci


0 commentaires

6 Réponses :


9
votes
Object o = vehicleIterator.next();
if (o instanceof Car) // Is a car
if (o instanceof Bus) // ...

0 commentaires

0
votes

Vous pouvez toujours utiliser getclass () au cas où vous ne saviez pas exactement que vous souhaitez attendre.


0 commentaires

5
votes

Un moyen est d'utiliser la méthode getclass () . xxx

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 instance de , devriez certainement être modifié si des types supplémentaires de voitures sont ajoutés.

sans avoir plus d'informations sur ce que vous faites avec Le type, je suggérerais que vous ayez un type de base véhicule que voiture , bus , 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.


0 commentaires

9
votes

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.

(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 instance de souvent) jusqu'à ce qu'il soit (y compris les appareils déployés) en 2004.)

Utilisation d'une instance et de casting a tendance à indiquer 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."]


3 commentaires

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 () ) 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 très souvent.)



2
votes

Puisque vous voulez la classe de l'élément suivant plutôt que celui actuel, envisagez d'utiliser un Itérateur sur Mise en œuvre.

Vous pouvez utiliser une condition de boucle comme: xxx


0 commentaires

0
votes

Generics canette de grande aide ici. Vous pouvez ensuite utiliser instance de pour déterminer la voiture du bus.


0 commentaires