我想对一个对象强制向下转换,这是不能被强制转换的,并且想知道正确的方法是什么。
用例是我有一个被检查的规则列表,什么将生成失败的规则列表。失败的规则是规则的子类。但是像
FailedRule failedRule =(FailedRule)规则;
将失败,因为规则对象不是FailedRule的实例
为了解决这个问题,我实例化了一个克隆。
FailedRule failedRule =新的FailedRule(规则);
我的FailedRule类看起来像这样
public class FailedRule extends Rule{
/*
*force a down cast from Rule to FailedRule through cloning
*/
public FailedRule (Rule upcast){
super.setRuleCode( upcast.getRuleCode());
super.setType(upcast.getType());
..
有没有更简单的方法可以做到这一点?
要回答我自己,设计有缺陷,代码应为:
public class FailedRule{
private Rule rule;
..
public setRule(Rule rule){
..
最佳答案
这可能是您的继承层次结构设计薄弱的征兆。您正在尝试通过继承引入属性的可变性(如果Rule
是FailedRule
的实例,则failed
已“失败”)。继承对于这种事情并不是很有益。
我会说您应该使用composition(FailedRule具有Rule作为源)或Rule
应该是ojit_code实例的布尔属性。