Java中的强制降频
作者:互联网
我想对一个对象进行强制性的下调,哪些内容不能被强制转换,并且想知道正确的方法是什么.
用例是我有一个被检查的规则列表,什么将生成失败的规则列表.失败的规则是规则的子类.但是像
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){
..
解决方法:
这可能是您的继承层次结构设计薄弱的征兆.您试图通过继承引入属性的可变性(如果规则是FailedRule的实例,则该规则“已失败”).继承对于那种事情并不是很好.
我会说您应该使用组合(FailedRule具有规则作为源),或者失败应该是Rule实例的布尔属性.
标签:downcast,casting,java,class,object 来源: https://codeday.me/bug/20191023/1914778.html