Java:获取子类的属性而不进行强制转换

时间:2014-05-16 14:25:32

标签: java attributes subclass visitor

假设我有一个超类Order和两个子类VehicleOrderTaskOrder。两者都从超类继承了很多方法,但是有一个特定的字段:VehicleOrder有一个ModelTaskOrder有一个任务。

现在,在另一个班级中,我有一个Order的列表。在该方法中,我需要根据订单的特定字段进行计算。

我现在的解决方案是使用两个方法OrdergetModel()“污染”超类getTask(),默认情况下返回null并且可以被子类覆盖。然后另一个类检查null,如果不为null,则进行计算。虽然这不是正确的方法...

由于我不知道其他类中一般订单列表的子类类型,我无法转换为获取该属性。

解决此问题的唯一方法是使用Visitor pattern,但这感觉有点矫枉过正..是吗?

有干净的方法吗?

2 个答案:

答案 0 :(得分:1)

为什么不在基类上添加抽象方法doCalculation,然后在子类中重写它。当您遍历订单列表时,只需调用doCalculation方法并相应处理。

答案 1 :(得分:1)

提取一个公共基类(或接口),Task和Model都可以实现。让Order引用该类型,而不是按每个订单类型引用具体类型。

这可能说起来容易做起,这取决于任务和模型的相似/不同。它可能需要重构和抽象更多东西才能工作。

如果证明变更/工作太多,请回到访客模式。