【问题标题】:How to create null safe, default value constructor with Syntactic sugar如何使用语法糖创建空安全的默认值构造函数
【发布时间】:2021-06-06 13:56:35
【问题描述】:

如果提供的值为 null,我如何使用语法糖创建一个 null 安全构造函数,该构造函数将设置默认值?

class Person {
  Person({
    required this.name, //Idealy, adding (?? "friend") instead of "required" should've worked but doesn't.
    required this.age,
  });
  String name;
  int age;
  greet() {
    print("Hello $name");
  }
}

所以,我其实想要这样的东西,

class Person {
  Person({
    this.name ?? "friend",
    this.age ?? 0,
  });
  String name;
  int age;
  greet() {
    print("Hello $name");
  }
}

但是,如您所知,这在 dart 中无效。那么,实际上,我应该如何实现呢?

【问题讨论】:

  • 这能回答你的问题吗? Constructor Optional Params
  • @Coder2195 是的,您给定链接的以下答案似乎确实回答了我的问题。抱歉,我一开始没有看到这些答案,我可以重新选择您的提案吗?
  • 是的,我将答案发布为答案而不是评论
  • @Cyber​​Avater 如果答案确实来自 Coder2195,请更新您的问题。建议的解决方案不处理您现在在问题中描述的“如果提供的值为 null,则将设置默认值”的情况。因此,如果这种情况不是您的问题的一部分,那么它不应该是问题的一部分。

标签: dart


【解决方案1】:
class Person {
  Person({
    String? name,
    int? age,
  })  : this.name = name ?? "friend",
        this.age = age ?? 0;
  String name;
  int age;

  void greet() {
    print("Hello $name");
  }
}

【讨论】:

    【解决方案2】:

    Constructor Optional Params 用于选择我的建议

    选择此作为答案(从获得许可的评论转换而来)

    【讨论】:

    • 我认为这不能回答“如果提供的值为 null 将设置默认值”的问题的这一部分。所以这不是一个可选的命名参数的问题,而是我们有一个情况,我们确实提供了一个参数,但应该将 null 作为输入处理,就像没有给出参数一样。该链接中的任何答案都没有提供具有该方面的解决方案。
    • 但是帖子的创建者这么说......它有效
    • 那么问题的创建者需要重新表述问题,因为我们只能假设书面问题是需要回答的问题。
    • 他从字面上说:@Coder2195 是的,看来您给定链接的以下答案确实回答了我的问题。抱歉,我一开始没有看到这些答案,我可以重新选择您的提案吗? (他接受我的回答)
    • 我确实看到了,然后我想对您的回答发表评论,以便其他人了解我们建议的两种解决方案之间的区别。我不同意,如果这解决了问题,那就太酷了。但是这个问题需要改变,这样其他人就不会认为这是解决现在描述的问题的方法。
    【解决方案3】:

    您也可以为可选参数使用默认值

    class Person {
      Person({
        this.name = "friend",
        this.age = 0,
      });
      String name;
      int age;
      greet() {
        print("Hello $name");
      }
    }
    

    参数不是必填,不传则取默认值。如果你确实传递一个参数,它必须是非空的。

    【讨论】:

      猜你喜欢
      • 2016-02-13
      • 2023-01-29
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 2021-06-10
      • 2016-11-03
      • 2014-07-05
      相关资源
      最近更新 更多