2011-07-15 1 views
1

J'ai deux classes nommées "BaseCatalog" et "City". "BaseCatalog" est la classe parent de "City", en d'autres termes, "City" étend la classe "BaseCatalog".Eléments de typage dans java.util.List

J'ai une méthode appelée "getBaseCatalogObjects" qui prend un paramètre catalogType et retourne une liste d'objets BaseCatalog. Selon le type donné, le type de la liste peut différer, mais il contient toujours des objets qui étendent la classe BaseCatalog principale. Étant donné que cette méthode est une méthode générique, elle produit toujours une liste contenant des objets BaseCatalog. Cependant, dans ce cas, je suis sûr que chaque instance BaseCatalog dans la liste est également un objet Ville:

List<BaseCatalog> baseCatalogObjects = getBaseCatalogObjects(CatalogType.CITY); 

Ce que je veux faire est de convertir cette liste « baseCatalogObjects » dans une liste appelée « cityObjects » qui est quelque chose comme:

List<City> cityObjects = (List<City>) baseCatalogObjects; 

est-il possible ou est-il un moyen efficace de faire une telle conversion comme celui-ci, sans créer une nouvelle instance java.util.List et itérer sur la liste « baseCatalogobjects »?

Répondre

1

Comme suggéré par Peter vous pouvez modifier votre signature de la méthode à quelque chose comme suit,

public <T extends BaseCatalog> List<T> getBaseCatalogObjects(Class<T> clazz, CatalogType type){} 

Et puis vous pouvez lancer votre liste dans la déclaration de retour comme,

(List<T>) list; 

Espérons que cela aide!

+0

Heureux d'aider :) –

3

Si vous "connaissez" tous les éléments sont des villes que vous pouvez utiliser, effacez le type. (Cela vous donne un avertissement que vous pouvez désactiver)

List<City> cityObjects = (List) baseCatalogObjects; 

ou vous pouvez passer le type désiré à la recherche qui peut également vérifier qu'ils sont le bon type.

List<City> cityObjects = getBaseCatalogObjects(City.class, CatalogType.CITY); 

En fait, vous pourriez trouver le CatalogType redondant.

List<City> cityObjects = getBaseCatalogObjects(City.class); 
+1

Liste cityObjects = (Liste) baseCatalogObjects fonctionne si je supprime l'avertissement "non coché". Merci. – ozgur

0

Vous pouvez essayer de faire quelque chose comme ceci:

City[] cityArr = baseCatalogObjects.toArray(new City[0]); 
List<City> cityObjects = Arrays.asList(cityArr);