1

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

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

因为这个方法是一个泛型方法,它总是产生一个包含 BaseCatalog 对象的 List。但是在这种情况下,我确信列表中的每个 BaseCatalog 实例也是一个 City 对象:

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

我想要做的是将此“baseCatalogObjects”列表转换为一个名为“cityObjects”的列表,类似于:

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

在不创建新的 java.util.List 实例并遍历列表“baseCatalogobjects”的情况下,是否有可能或有任何有效的方法来进行这样的转换?

4

3 回答 3

3

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

List<City> cityObjects = (List) baseCatalogObjects;

或者您可以将所需的类型传递给搜索,也可以检查它们是否是正确的类型。

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

事实上,您可能会发现 CatalogType 是多余的。

List<City> cityObjects = getBaseCatalogObjects(City.class);
于 2011-07-15T08:09:57.760 回答
1

正如彼得所建议的,您可以将您的方法签名更改为如下所示,

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

然后你可以在 return 语句中转换你的列表,比如,

(List<T>) list;

希望这可以帮助!

于 2011-07-15T08:22:04.010 回答
0

你可以尝试做这样的事情:

City[] cityArr = baseCatalogObjects.toArray(new City[0]);
List<City> cityObjects = Arrays.asList(cityArr);
于 2011-07-15T08:13:03.397 回答