是否可以从动物列表中获取狗列表而无需演员表?

问题描述 投票:0回答:2

我的班上有一个

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 答案 中读到了它,但我需要它,因为我使用的是 JSF,并且我需要在页面的 EL 表达式中使用 Animal 没有的
Dog
方法。

自从我为

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

我可以使用

animals.put("dogs", new ArrayList<Dog>());
或其他替代方法吗?

PS:我使用的是Java 7

java jsf jsf-2 java-7 el
2个回答
0
投票

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

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

我不知道为什么,但是将

var="animal"
更改为其他任何内容都可以。我不需要任何演员。


0
投票

绝对可以在不进行强制转换的情况下从动物列表中提取狗列表,但这取决于数据结构和类层次结构的设置方式。如果您使用的继承模型中 Dog 是 Animal 的子类,则可以根据实例类型过滤列表。例如,在 Java 中使用 instanceof 或在 Python 中使用 is 可以让您识别列表中的 Dog 对象。

顺便说一句,在处理狗等特定物体时,使用“狗圈日计算器”可以方便地跟踪您的宠物的活跃程度并计划他们的锻炼习惯!令人着迷的是,技术如何与现实世界的应用相结合,例如在编写有效的解决方案的同时保持我们的狗的健康。

© www.soinside.com 2019 - 2024. All rights reserved.