【发布时间】:2010-12-03 15:56:31
【问题描述】:
我想对一个无法向下转换的对象强制进行向下转换,并且想知道正确的方法是什么。
用例是我有一个检查的规则列表以及生成失败规则列表的内容。失败的规则是规则的子类。但是像
FailedRule failedRule = (FailedRule) rule;
将失败,因为规则对象不是 FailedRule 的实例
为了解决这个问题,我实例化了一个克隆;
FailedRule failedRule = new FailedRule (rule);
我的 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){
..
【问题讨论】:
-
我想知道您最终是如何对无法向下转换的对象强制向下转换。向我们解释您真正想做的事情。
-
我虽然做到了:-)。我遍历规则列表并返回失败的规则列表。检查过程会根据规则返回大量信息,为什么以及何时以及如何失败。马克的回答是正确的,我的设计是错误的,我不能说失败的规则是“规则”。它'有一个'规则。我已经编辑了问题,因为我无法将代码放入这些 cmets
标签: java class object casting downcast