一种缺乏浅克隆的方法

时间:2015-11-23 15:54:33

标签: dart

我在Dart中有一个非常简单的类,它只有3个最终字段,一个构造函数和一个方法:

class Status {
  final Context context;
  final String carry;
  final int depth;

  const Status({
    Context this.context,
    String this.carry: null,
    int this.depth: 0
  });

  Status dive({
    Context context: null,
    String carry: null,
    int depth: null
  }) {
    return new Status(
      context: context ?? this.context,
      carry: carry ?? this.carry,
      depth: depth ?? this.depth
    );
  }
}

dive方法基本上创建了Status的副本,其中包含明确提供的相同字段值。

我发现自己必须编写一个只有一个名为isSafe的附加字段的子类:

class SecureStatus extends Status {
  final bool isSafe;
}

此字段必须包含在构造函数和dive方法中。这就产生了一个问题:为了达到这个目的,我必须为那个小字段重复疯狂的代码量。这显然违反了DRY rule

class SecureStatus extends Status {
  final bool isSafe;

  // redundant from here...
  const SecureStatus ({
    Context context,
    String carry: null,
    int depth: 0,
    bool this.isSafe: false
  }) : super(
    context: context,
    carry: carry,
    depth: depth
  );

  SecureStatus dive({
    Context context: null,
    String carry: null,
    int depth: null,
    bool isSafe: null
  }){
    return new SecureStatus(
        context: context ?? this.context,
        carry: carry ?? this.carry,
        depth: depth ?? this.depth,
        isSafe: isSafe ?? this.isSafe
    );
  }
  // ...to here
}

由于little nuances around constructors,从基类复制粘贴代码甚至都不值得。

我知道there is no such thing as object copying in Dart,但我的用例必须有更好的方法。在我看来,使用镜子将是一种矫枉过正。在Scala中,我只使用案例类+ copy()方法。 Dart有什么可以做的吗?也许我应该考虑完全不同的方法,我现在想念的?或者也许在将来的语言版本中会有一些功能,在这种情况下会有所帮助吗?

0 个答案:

没有答案