是否可以在没有演员表的情况下从动物列表中获取狗列表?

Is it possible to get a list of Dog from a list of Animal without a cast?

我的 class 中有一个 protected Map<String, List<Animal>> animals;。在我的构造函数中,我有

animals.put("dogs", new ArrayList<Animal>());
animals.put("cats", new ArrayList<Animal>());

一切正常,正如预期的那样。如果我想要一个 Dog 或一个 Cat,我只需要从地图中获取并投射即可。

但是,如果我想要怎么办

animals.put("dogs", new ArrayList<Dog>());

Java 不允许我这样做。我也在 this SO answers 中阅读了它,但我需要它,因为我正在使用 JSF,并且我需要在页面的 EL 表达式中使用 Animal 没有的 Dog 方法。

自从我为 Animal 创建了一个工厂后,我想使用该工厂来获取正确的对象类型,但我觉得有点奇怪。

有什么方法可以使用 animals.put("dogs", new ArrayList<Dog>()); 或其他替代方法吗?

PS: 我正在使用 Java 7

好吧,这看起来很荒谬,但问题出在 JSF 代码中:

<ui:repeat var="animal" value="#{bean.animals.get('dogs')}" varStatus="status">

我不知道为什么,但将 var="animal" 更改为其他任何内容都有效。我不需要任何演员。