小常识,大挑战!本文正在参加“程序员必备小常识”创造活动。

本文一起参加「掘力星方案」,赢取创造大礼包,挑战创造鼓励金。

【Flutter】学习养成记,【程序员必备小常识】

今天小常识——【Flutter】Dart中的工厂结构办法&单例目标&初始化列表!

1. 写在前面

在上篇文章中介绍了Dart中的结构函数,那么现在就持续来学习 Dart 工厂结构&单例目标&初始化列表

【Flutter】苹果Mac电脑配置flutter开发环境

【Flutter】 Android Studio 安装第三方模拟器—网易MuMu

【Flutter】项目运转报错Failed to find Build Tools revision 29.0.2

【Flutter】flutter doctor 报错Android license status unknown. Run `flutter doctor –android-licenses‘

【Flutter】如何新建项目,运转你的第一个 flutter 工程项目

【Flutter】Dart中的var、final 和 const基本使用

【Flutter】Dart数据类型之num

【Flutter】Dart数据类型之String

【Flutter】Dart的数据类型list&Map(数组和字典)

【Flutter】Dart的办法与箭头函数

【Flutter】Dart的办法中的可选参数、办法作为参数传递

【Flutter】Dart中的匿名函数、闭包

【Flutter】Dart中的类和目标

【Flutter】Dart中的结构函数

2. 单例目标

许多时候,我们需求使用单例,那么怎么样创立一个单例呢?我们试试去创立一下。

class FactoryClass{
 final name;
 final age;
 const FactoryClass(this.name,this.age);
}

final 润饰所有的特点,这样的方式行不可呢?试试看吧!

 FactoryClass fact1 =  FactoryClass("reno", 18);
  FactoryClass fact2 =  FactoryClass("jp", 20);
  print(fact1 == fact2);

打印成果的成果为false,所有这样是不可的。

  • 工厂结构办法

要使用return返回的话,办法前面有必要加factory,表示工厂结构办法。由于没有返回值,你这儿要返回就的用factory

class FactoryClass{
 static FactoryClass? _instance;
 factory FactoryClass() {
  // if(_instance == null){
  //  _instance = FactoryClass._init();
  // }
 _instance ??= FactoryClass._init();
 return _instance;
 }
 //私有的结构命名函数
  FactoryClass._init();
}

上面应该是在dart 2.0语法之前的写法,会报错,如下:

【Flutter】Dart的工厂构造方法&单例对象&初始化列表

过错:“FactoryClass?”类型的值 无法从返回类型为“FactoryClass”的函数中返回,由于“FactoryClass?” 可认为空,而 ‘FactoryClass‘ 不是。

如过你非要这么写单例,在 2.0之后不报错的话,加个感叹号!,类似于 Swift 中的解包,保证对错空的。

return _instance!;
  • 创立两个目标对比一下
    【Flutter】Dart的工厂构造方法&单例对象&初始化列表
    从打印成果来看,两个目标是相同的,说明是单例目标。

比较好的写法,如下:

class FactoryClass{
 //保存单例
 static final FactoryClass _instance =  FactoryClass._init();
 //私有的结构函数
  FactoryClass._init();
  //工厂结构函数
  factory FactoryClass()=>_instance;
}

【Flutter】Dart的工厂构造方法&单例对象&初始化列表

完美运转,成果也是相同的。

3. 初始化列表

定义一个车的类 Car,特点分别为,车的名称,价格,高度。

class Car {
  String name;
  double price;
  final height;
//结构办法
  Car(this.name,this.price,double h):height = h,
  assert(h>=0),assert(price>0){
    print("name:$name price:$price height:$height");
  }
}

如上代码中,结构办法的冒号:后面便是初始化列表,能够使用assert校验特点的值,如果不合规就会报错,如下:

【Flutter】Dart的工厂构造方法&单例对象&初始化列表

那么按提示的要求改下就好了,也便是到达校验的意图!

初始化列表的意图:

  1. 给 final 变量赋值
  2. 校验传递的值

4. 写在后面

重视我,更多内容持续输出

  • CSDN
  • 简书

喜爱就点个赞吧

觉得有收获的,能够来一波 保藏+重视,避免你下次找不到我

欢迎大家留言沟通,批评指正,转发请注明出处,谢谢支撑!