在dart中将最终变量设为私有是否多余?

时间:2019-06-26 22:08:56

标签: class flutter dart final private-members

以下类具有多个参数,但只有一些需要最终确定;我的问是,我还应该将这些最终变量设为私有,还是这样做多余?

class Car {
    final double _galInFullTank;
    get galInFullTank => _galInFullTank;
    double _miDrivenToEmpty;
    get miDrivenToEmpty => _miDrivenToEmpty;
    double _mpg;
    get mpg => _mpg;

    void update(double newMiDrivenToEmpty) {
        _miDrivenToEmpty = newMiDrivenToEmpty;
        _mpg = _miDrivenToEmpty/_galInFullTank;
    }

    Car({galInFullTank = 12, miDrivenToEmpty = 300}) :
        _galInFullTank = galInFullTank,
        _miDrivenToEmpty = miDrivenToEmpty,
        _mpg = miDrivenToEmpty/galInFullTank;
    }
}

2 个答案:

答案 0 :(得分:0)

它有一些用例。它可以用于向下转换变量。

例如,使用RxDart,我们可以:

recursiveProxy: any = {
   get: this.recursiveProxyGetter,
   set: this.recursiveProxySetter
}

这隐藏了实现细节。

它也可以用来在吸气剂内部做一些额外的事情。例如,Mobx使用它来知道使用了哪些值。

但是直接暴露变量而不进行修改或额外的计算是没有意义的。

答案 1 :(得分:0)

创建私人成员final并非多余。通常,私有和final是正交的。例如,考虑如下内容:

class Foo {
  final List<int> someList;
}

仅仅因为Foo.someListfinal并不能阻止外部代码对其进行修改(例如someFoo.someList.clear())。

您应该将不希望成为API一部分的东西设为私有。