Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 在dart中使最终变量私有是多余的吗?_Class_Flutter_Dart_Final_Private Members - Fatal编程技术网

Class 在dart中使最终变量私有是多余的吗?

Class 在dart中使最终变量私有是多余的吗?,class,flutter,dart,final,private-members,Class,Flutter,Dart,Final,Private Members,下面的类有多个参数,但只有一些参数需要是最终的;我的问题是,我是否应该将这些最终变量私有化,或者这样做是多余的 class Car { final double _galInFullTank; get galInFullTank => _galInFullTank; double _miDrivenToEmpty; get miDrivenToEmpty => _miDrivenToEmpty; double _mpg; get mpg

下面的类有多个参数,但只有一些参数需要是最终的;我的问题是,我是否应该将这些最终变量私有化,或者这样做是多余的

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;
    }
}

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

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

final behavior subject\u foo;
流get foo=>foo;
这隐藏了实现细节

它还可以用来在getter中做额外的事情。例如,Mobx使用它来了解使用了哪些值


但是直接公开变量而不进行修改或额外计算是毫无意义的。

使私有成员成为final并不是多余的。一般来说,私人身份和最终身份是正交的。例如,考虑一些类似的事情:

class Foo {
  final List<int> someList;
}
class-Foo{
最终名单;
}
仅仅因为
Foo.someList
final
并不能阻止外部代码修改它(例如
someFoo.someList.clear()


您应该将您不想成为API一部分的内容设置为私有。

Ty,您的提供程序包让我更喜欢Flutter dev!为了测试我对你答案的理解,你能回答这个问题吗?问:将
galInFullTank
公开(在我的简单情况下,你的用例都不适用)可以接受吗?