考虑这段代码:
class Parent {
final List<int> bytes;
Parent(this.bytes);
}
class Child extends Parent {
final String name;
Child(String s) : name = s.trim(), super(s.trim().codeUnits);
}
基本上,
Child
接受String
作为构造函数参数。我想要做的是修剪它,将其存储在 name
变量中,并将其 codeUnits
传递给 super
构造函数。我面临的问题是,似乎没有办法避免调用 trim
两次。我很想在 name
中使用 super
,但 Dart 不允许。有什么办法可以让 trim
只调用一次吗?
一种解决方案是创建第二个构造函数,在使用真正的构造函数(现在标记为私有)之前准备数据:
class Child extends Parent {
final String name;
Child._(this.name) : super(name.codeUnits);
Child(String s) : this._(s.trim());
}
如果你有更复杂的情况,可能还需要使用工厂构造函数:
https://dart.dev/language/constructors#factory-constructors