编程语言
首页 > 编程语言> > Java中的强制降频

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