美文网首页Flutter
Dart:修饰符 static final const

Dart:修饰符 static final const

作者: jeffiano | 来源:发表于2018-08-13 22:08 被阅读0次

    阿里巴巴口碑Android开发内推
    今天来说一下Dart语言中的这三个修饰符的异同。
    static:用于修饰成员变量,这个变量是属于类的,而不是属于对象的,除此之外没有其他别的含义了,static修饰符的使用方式和Java类似。 static变量直到运行期被使用时才会实例化。
    final:用于修饰变量,表示单赋值(single-assignment),使用final修饰的变量必须进行初始化,一旦被赋值之后,不能够再次被赋值,否则编译会报错。

    const:含义稍显复杂。dart中const是用来修饰某个值的,可以通过它来创建集合:

    var list =  const [1, 2, 3];
    

    或者用来构造对象:

    var point = const Point(2, 3);
    

    这里const表示Point对象的状态完全可以在编译期间确定,并且完全是不可变的。
    被const修饰的对象有些特殊的属性和限制:
    1.必须依靠编译期间就能够计算出来的数据进行创建,包括两种情况:

    • 使用Dart内置数据类型的值(int double bool String List Map等等)进行赋值,或者使用内置数据类型的字面量通过基本运算得到的值,而不能依赖运行期计算出来的值,例如:
    const num = 1 + 2;
    

    但是new DateTime.now() 不行。

    • const构造函数创建的对象,例如:

    这里的Student类中定义了一个const构造函数,一个类能够定义 const 构造函数的前提是成员变量必须都是用final或const修饰的。

    2.const导致的不可变性是可传递的,如果你有一个final修饰的成员变量,这个成员变量包含了一个集合,那么这个集合仍然是可变的。如果包含的是const修饰的集合,那么集合内的所有东西是递归地不可变的。

    运行结果:

    3.相同的const变量不会在内存中重复创建,如果表达式被调用了多次,则重用之前创建好的常量,或者用代码表达这一特性:

    getConst() => const [1, 2];
    main() {
      var a = getConst();
      var b = getConst();
      identical(a, b); // =>true
    }
    

    其中identical用于检查两个引用是否指向同一个对象。

    Flutter程序员公众号,关注Flutter相关话题~

    相关文章

      网友评论

        本文标题:Dart:修饰符 static final const

        本文链接:https://www.haomeiwen.com/subject/srrubftx.html