【问题标题】:Update final fields only if not null in constructor dart只有在构造函数飞镖中不为空时才更新最终字段
【发布时间】:2018-07-26 18:34:52
【问题描述】:

我有一个名为 App 的类,其中包含一些字段。 只有当传递给构造函数的参数不为空时,我才想初始化最终字段。

例如,在下面的代码中,我只想设置不为空的配置参数。

我尝试了下面的代码,但它不起作用

@immutable
class App {
    final AuthState auth;
    final RConfig config;

    App({AuthState auth, this.config}):
        auth = auth ?? new AuthState(), config = config != null ? config : this.config ;

虽然我对 dart 很陌生,但我知道我不能两次初始化 final 字段,但是由于 AppState 会再次创建应用程序状态,并且当时 RConfig 可能为空。

我的问题很简单,就是如何在分配它们之前检查多个最终字段的有效性,例如 null 或空。

【问题讨论】:

    标签: dart dart-pub


    【解决方案1】:

    您不能两次初始化一个字段。您使用初始化形式 (this.config) 和初始化列表条目 config = ... 来初始化 config

    我不确定你想用 config 做什么,但首先将其声明为普通参数,然后弄清楚你想要做什么:

    AppState({AuthState auth, RConfig config})
        : auth = auth ?? new AuthState(), config = config; // or something
    

    【讨论】:

    • 我一般不熟悉可选注释,它们对程序的行为没有影响(它们可以让工具给你额外的警告,但程序的含义不会改变)。我认为Immutable 注释没有任何区别——我上面给出的代码有效,如果你需要别的东西,你需要弄清楚那是什么。
    • 或者为您的可选参数定义默认值更容易:AppState({AuthState auth = AuthState.dummy(), RConfig config}){...}
    猜你喜欢
    • 2018-10-29
    • 1970-01-01
    • 2018-10-20
    • 2017-06-26
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多