在Dart中的可选参数构造函数中使用构造函数初始化成员

马里奥1159

根据我的以下代码,我想要一个该类构造函数,该构造函数Hero将一个Stats类作为可选参数,并根据其构造函数 具有默认值 该构造函数通过一个可选名称将其运行状况和攻击字段设置为100和10参数),而不是null

void main() {
  Hero hero = Hero("Foo");
  print('${hero.name} : HP ${hero.stats.health}');
}
class Stats {
  Stats({this.health = 100, this.attack = 10});
  double health;
  double attack;
}
class Hero {
  // error: The default value of an optional parameter must be constant
  Hero(this.name,[this.stats = Stats()]);
  String name;
  Stats stats;
}

我尝试过的更多操作:

class Hero {
  // error: Can't have a const constructor for a class with non-final fields
  Hero(this.name,[this.stats = const Stats()]);
  String name;
  Stats stats;
}
class Hero {
  // error: stats initialized as null
  Hero(this.name,[this.stats]);
  String name;
  Stats stats = Stats();
}

以下代码有效,但没有统计信息作为可选参数:

class Hero {
  Hero(this.name);
  String name;
  Stats stats = Stats();
}
马里奥1159

由于@jamesdlin在评论中链接到他的答案致谢

通常,如果没有const构造函数,您可以改为使用空默认值(或其他一些合适的哨兵值),然后在以后设置所需的值:

class Foo {
  Bar bar;

  Foo({Bar bar}) : bar = bar ?? Bar();
}

(请注意,与直接设置默认值相比,使用此方法显式传递null作为参数将产生不同的效果。也就是说,使用此方法将Foo(bar:null)初始化为bar(),而使用常规方法默认值,它将把bar初始化为null。但是,在某些情况下,这种方法的行为可能更理想。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在构造函数中初始化成员

来自分类Dev

使用已删除的默认构造函数初始化成员

来自分类Dev

如何在C ++中初始化成员的构造函数参数

来自分类Dev

C ++使用构造函数参数初始化成员数组

来自分类Dev

在使用相同名称的构造函数参数初始化成员变量时,=和{}之间的区别

来自分类Dev

是否可以在构造函数体内而不是初始化列表中初始化成员变量?

来自分类Dev

在基本构造函数之前初始化成员。可能?

来自分类Dev

Matlab-构造函数不会初始化成员值

来自分类Dev

在构造函数中初始化成员时,应该在成员上使用std :: move吗?

来自分类Dev

在构造函数中使用输出参数函数初始化const成员的调用的代码比lambda简单

来自分类Java

在类定义的开始或构造函数中初始化成员变量?

来自分类Java

应该在类或构造函数中初始化成员吗?

来自分类Dev

C ++:在constexpr构造函数中初始化成员数组

来自分类Dev

在类构造函数中初始化成员的快捷方式

来自分类Dev

常量表达式中带有未初始化成员的“默认”构造函数

来自分类Dev

为什么收到此警告?“未在此构造函数中初始化成员'x'”

来自分类Dev

构造函数是否必须在C ++中初始化成员变量?

来自分类Dev

C++ 如何使用隐藏的默认构造函数初始化成员?

来自分类Dev

使用构造函数的参数初始化向量成员

来自分类Dev

为什么可以在构造函数中使用成员初始化来满足显式构造函数的参数呢?

来自分类Dev

在 Dart 中使用固定参数初始化超级构造函数的最佳方法?

来自分类Dev

编译器错误,因为构造函数必须显式初始化成员

来自分类Java

为什么在超类的构造函数之后初始化成员对象?

来自分类Dev

为什么委派给默认构造函数的初始化成员变量不为零

来自分类Dev

通过使用带有构造函数委托的SFINAE,通过类模板的构造函数通用地应用方法来初始化成员

来自分类Dev

c ++构造函数成员初始化:传递参数

来自分类Dev

如何访问初始化函数中不是成员变量的构造函数参数?

来自分类Dev

cppcheck:构造函数中未初始化的成员变量

来自分类Dev

重载构造函数中的成员初始化

Related 相关文章

  1. 1

    在构造函数中初始化成员

  2. 2

    使用已删除的默认构造函数初始化成员

  3. 3

    如何在C ++中初始化成员的构造函数参数

  4. 4

    C ++使用构造函数参数初始化成员数组

  5. 5

    在使用相同名称的构造函数参数初始化成员变量时,=和{}之间的区别

  6. 6

    是否可以在构造函数体内而不是初始化列表中初始化成员变量?

  7. 7

    在基本构造函数之前初始化成员。可能?

  8. 8

    Matlab-构造函数不会初始化成员值

  9. 9

    在构造函数中初始化成员时,应该在成员上使用std :: move吗?

  10. 10

    在构造函数中使用输出参数函数初始化const成员的调用的代码比lambda简单

  11. 11

    在类定义的开始或构造函数中初始化成员变量?

  12. 12

    应该在类或构造函数中初始化成员吗?

  13. 13

    C ++:在constexpr构造函数中初始化成员数组

  14. 14

    在类构造函数中初始化成员的快捷方式

  15. 15

    常量表达式中带有未初始化成员的“默认”构造函数

  16. 16

    为什么收到此警告?“未在此构造函数中初始化成员'x'”

  17. 17

    构造函数是否必须在C ++中初始化成员变量?

  18. 18

    C++ 如何使用隐藏的默认构造函数初始化成员?

  19. 19

    使用构造函数的参数初始化向量成员

  20. 20

    为什么可以在构造函数中使用成员初始化来满足显式构造函数的参数呢?

  21. 21

    在 Dart 中使用固定参数初始化超级构造函数的最佳方法?

  22. 22

    编译器错误,因为构造函数必须显式初始化成员

  23. 23

    为什么在超类的构造函数之后初始化成员对象?

  24. 24

    为什么委派给默认构造函数的初始化成员变量不为零

  25. 25

    通过使用带有构造函数委托的SFINAE,通过类模板的构造函数通用地应用方法来初始化成员

  26. 26

    c ++构造函数成员初始化:传递参数

  27. 27

    如何访问初始化函数中不是成员变量的构造函数参数?

  28. 28

    cppcheck:构造函数中未初始化的成员变量

  29. 29

    重载构造函数中的成员初始化

热门标签

归档