java.util.List中的类型转换元素

java.util.List中的类型转换元素,java,arraylist,type-conversion,extends,Java,Arraylist,Type Conversion,Extends,我有两个班,分别是“BaseCatalog”和“City”。“BaseCatalog”是“City”的父类,换句话说,“City”扩展了“BaseCatalog”类 我有一个名为“getBaseCatalogObjects”的方法,它接受一个参数catalogType和 返回BaseCatalog对象的列表。根据给定的类型,列表的类型可能不同,但它始终包含扩展主BaseCatalog类的对象 由于此方法是泛型方法,因此它始终生成包含BaseCatalog对象的列表。但是,在本例中,我确信列表中的

我有两个班,分别是“BaseCatalog”和“City”。“BaseCatalog”是“City”的父类,换句话说,“City”扩展了“BaseCatalog”类

我有一个名为“getBaseCatalogObjects”的方法,它接受一个参数catalogType和 返回BaseCatalog对象的列表。根据给定的类型,列表的类型可能不同,但它始终包含扩展主BaseCatalog类的对象

由于此方法是泛型方法,因此它始终生成包含BaseCatalog对象的列表。但是,在本例中,我确信列表中的每个BaseCatalog实例也是一个城市对象:

List<BaseCatalog> baseCatalogObjects = getBaseCatalogObjects(CatalogType.CITY);
List baseCatalogObjects=getBaseCatalogObjects(CatalogType.CITY);
我想做的是将这个“BaseCalogObjects”列表转换为一个名为“cityObjects”的列表,类似于:

List<City> cityObjects = (List<City>) baseCatalogObjects;
List cityObjects=(List)baseCatalogObjects;
在不创建新的java.util.List实例并迭代列表“baseCatalogobjects”的情况下,是否有可能或有任何有效的方法进行这样的转换?

如果“知道”所有元素都是城市,则可以使用类型擦除。(这会给您一个警告,您可以关闭该警告)

List cityObjects=(List)baseCatalogObjects;
或者,您可以将所需类型传递给搜索,搜索也可以检查它们是否为正确的类型

List<City> cityObjects = getBaseCatalogObjects(City.class, CatalogType.CITY);
List cityObjects=getBaseCatalogObjects(City.class,CatalogType.City);
事实上,您可能会发现CatalogType是多余的

List<City> cityObjects = getBaseCatalogObjects(City.class);
List cityObjects=getBaseCatalogObjects(City.class);
如果你“知道”所有元素都是城市,你可以使用类型擦除。(这会给您一个警告,您可以关闭该警告)

List cityObjects=(List)baseCatalogObjects;
或者,您可以将所需类型传递给搜索,搜索也可以检查它们是否为正确的类型

List<City> cityObjects = getBaseCatalogObjects(City.class, CatalogType.CITY);
List cityObjects=getBaseCatalogObjects(City.class,CatalogType.City);
事实上,您可能会发现CatalogType是多余的

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

您可以尝试这样做:

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

您可以尝试这样做:

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

根据Peter的建议,您可以将方法签名更改为以下内容:

public <T extends BaseCatalog> List<T> getBaseCatalogObjects(Class<T> clazz, CatalogType type){}
public List getBaseCatalogObjects(类clazz,CatalogType类型){
然后你可以在return语句中转换你的列表

(List<T>) list;
(列表)列表;

希望这有帮助

根据Peter的建议,您可以将方法签名更改为以下内容:

public <T extends BaseCatalog> List<T> getBaseCatalogObjects(Class<T> clazz, CatalogType type){}
public List getBaseCatalogObjects(类clazz,CatalogType类型){
然后你可以在return语句中转换你的列表

(List<T>) list;
(列表)列表;
希望这有帮助

List cityObjects=(List)BASECALOGOTOBJECTS在我抑制“未选中”警告时工作。谢谢。如果我取消显示“未选中”警告,List cityObjects=(List)baseCatalogObjects可以工作。谢谢