如何在将构造函数参数分配给最终变量并将其传递给超级构造函数之前对其进行操作?

问题描述 投票:0回答:1

考虑这段代码:

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
只调用一次吗?

dart
1个回答
0
投票

一种解决方案是创建第二个构造函数,在使用真正的构造函数(现在标记为私有)之前准备数据:

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

© www.soinside.com 2019 - 2024. All rights reserved.