我有这样的声明
TransactionItemDto itemDto = getTransactionItemMessage().getTransactionItemDto();
然后我有以下代码:
if (itemDto instanceof ChangeTransactionItemDto) {
inputItem.setSiteCode(itemDto.getSiteCode()));
inputItem.setBinLocation(itemDto.getBinLocation()));
}
现在,我的变量“department
”仅属于ChangeTransactionItemDto
。但我目前无法在上面的if块中执行此操作:inputItem.setDepartment(itemDto.getDepartment()));
这是因为itemDto被声明为TransactionItemDto
类型,而不是ChangeTransactionItemDto
。
我可以在调试过程中检查值,如果我在内部属于子类类型itemDto.getDepartment()
。但声明给出了错误。
如何在ChangeTransactionItemDto
上设置属于子类的部门inputItem
?
答案 0 :(得分:0)
由于您已验证itemDto
是否为实例ChangeTransactionItemDto
,因此您随时可以致电inputItem.setDepartment(((ChangeTransactionItemDto)itemDto).getDepartment())
答案 1 :(得分:0)
如果超类需要访问特定于子类的字段,这是一种设计气味。
一个解决方法是将getter / setter拉入带有“do nothing”实现的超类中,然后那些使用它的子类用“do something”实现覆盖它。
这样,类层次结构中没有需要特殊处理的类 - 它们可以所有以相同的方式处理。