我有两个java对象:WorkflowVo
和TypeAWorkflowVo
。 TypeAWorkflowVo
是WorkflowVo
的子类。 WorkflowVo有字段 - 名称,利润中心。
TypeAWorkflowVo有字段schedule,entity。
我使用
将TypeAWorkflowVo
存储在列表中
List<? extends WorkflowVo> lsWfItems = new ArrayList<TypeAWorkflowVo>();
是否可以在运行时从TypeAWorkflowVo
访问lsWfItems
(计划,实体)的字段?
我只能在运行时看到WorkflowVo
个字段(名称,利润中心)。换句话说,我只在WorkflowVo
中看到lsWfItems
个对象。请指教。
答案 0 :(得分:1)
您目前所写的方式无效。你有几个选择
其中每一项都有其优点而且失败,决定将完全取决于该对象的情况和定义。这些领域应该在超级班吗?该列表应该是子类还是超类。您从应用程序中的每个方法中获得了什么?所有这些都将从应用程序中回答
答案 1 :(得分:0)
我使用
将TypeAWorkflowVo存储在列表中
List<? extends WorkflowVo> lsWfItems = new ArrayList<TypeAWorkflowVo>();
这是不可能的。
<? extends SomeThing>
不允许在集合中添加任何内容,但null
。
如果您希望能够在WorkflowVo
中添加List
个实例,则应该声明这一点:
List<WorkflowVo> lsWfItems = new ArrayList<WorkflowVo>();
是否可以访问TypeAWorkflowVo的字段(schedule, 实体)来自运行时的lsWfItems?
当您声明List<? extends WorkflowVo> lsWfItems
时,您应该对TypeAWorkflowVo
进行投射以使用它的指定方法。
例如:
for (WorkflowVo workFlow : lsWfItems){
if (workFlow instanceof TypeAWorkflowVo){
TypeAWorkflowVo typeWorkFlow = (TypeAWorkflowVo) workFlow;
...
}
}
现在,你可以避免施法,这会更好
理想情况下,如果您只在TypeAWorkflowVo
中存储List
个实例,请声明:
List<TypeAWorkflowVo> lsWfItems = new ArrayList<TypeAWorkflowVo>();