Quel est le meilleur à la façon de convertir un ensemble d'objets Java à un autre ensemble d'objets?
De base de Java est question ici d'un vrai débutant. J'ai un ensemble d'objets Java (de la classe "Maclasse") qui mettent en œuvre une certaine interface (Interface "MyIfc"). J'ai un de ces objets stockés dans une variable privée dans ma classe qui est déclarée comme suit:
protected Set<MyClass> stuff = new HashSet<MyClass>();
J'ai besoin de fournir une méthode qui retourne cet ensemble comme une collection d'objets de type "MyIfc".
public Collection<MyIfc> getMyStuff() {...}
Comment puis-je faire la conversion? La ligne suivante donne moi une erreur qu'il ne peut pas faire la conversion. J'aurais deviné le compilateur savait que les objets de la classe MyClass mis en œuvre MyIfc et, par conséquent, aurait manipulé.
Collection<MyIfc> newstuff = stuff;
Toute l'illumination est apprécié.
Comment sur le retour de
Collection<? extends Mylfc>
?
OriginalL'auteur HDave | 2010-04-30
Vous devez vous connecter pour publier un commentaire.
Probablement la plus correcte est:
Si la classe est trop nombreuse pour ce faire, vous pouvez le faire:
OriginalL'auteur Yishai
Le compilateur n'aime pas votre mission de choses à newstuff, car il établit la possibilité de mettre les choses en newstuff que de mettre en œuvre MyIfc mais ne sont pas de type Maclasse. Vous pourriez avoir votre getter créer sa propre collection:
OriginalL'auteur Nathan Hughes
Vous n'avez pas besoin de faire de conversion. Vous devrez taper votre
stuff
commeSet<MyIfc>
.De fond: Oui, il est exact que si vous avez un objet de type
MyClass
ce sera aussi utilisable comme unMyIfc
instance. Mais vous l'avez explicitement tapé votre Jeu de typeMyClass
. Et c'est tout simplement quelque chose de différent qu'un Ensemble de typeMyIfc
. Après tout, vous pourriez aussi avoir d'autres classes qui implémententMyIfc
, et puis vous pouvez aussi les mettre dans votreSet<MyIfc>
mais pas dansSet<MyClass>
.OriginalL'auteur Gerd Klima
Google collections définir un tas de paresseux cartes, qui peuvent être adaptés à vos besoins.
Un en particulier est Collections2.transformer. Voici un exemple sur la façon d'adapter votre collection:
Set<MyIfc>
en interne. Et beweare votre code renvoie une vue en direct qui ne pas permet d'ajouter/addAll.Je suis d'accord, ça n'a pas de sens de faire tout cela.
OriginalL'auteur Alexander Pogrebnyak