Android开发Dart Constructors构造函数使用技巧整理

目录
  • 参考
  • 正文
  • 什么是构造函数?
    • 缺省构造函数 ー Class()
    • 私有构造函数ー Class._()
    • 命名构造函数ー class.Named()
    • 私有命名构造函数ー class._Named ()
    • 工厂构造函数ー factory class Class()

参考

https://dart.dev/guides/language/language-tour#factory-constructors

https://www.freecodecamp.org/news/constructors-in-dart

https://stackoverflow.com/questions/52299304/dart-advantage-of-a-factory-constructor-identifier

https://dash-overflow.net/articles/factory/

https://flutterigniter.com/deconstructing-dart-constructors/

https://dart.dev/guides/language/language-tour

正文

这篇文章是探讨下 Dart 构造函数的一些使用技巧

首先

什么是构造函数?

构造函数是用于初始化对象的特殊方法。在创建类的对象时调用构造函数。

默认情况

final ehe = MyClass(); // Creates an instanceclass MyClass {
  MyClass(); // Fires immediately when created (this guy is cons.)
}

在构造函数中只有一个规则

也就是说;

与它的类名一样命名它! !

好的,我们知道了! 但是…

我们具体有哪些类型的构造函数类型?

缺省构造函数 ー Class()

// Default Constructor
// 默认什么都不做
class User {
  String name = 'ehe';
  User();
}
///
// Constructor with parameters
// 构造时初始变量
class User {
  String name;
  User(this.name);
}
///
// Constructor with the initial method
// 构造函数内写入你的逻辑
class User {
  String name;
  User(this.name) {
    // do some magic
  }
}
/
// Constructor with assertion
// 使用 Asserts 去检查你的规则
class User {
  String name;
  User(this.name) : assert(name.length > 3);
}
// Constructor with initializer
// 初始化你的变量
class User {
  static String uppercase(String e) => e.toUpperCase();
  String name;
  User(name) : name = yell(name);
  static String yell(String e) => e.toUpperCase();
}
/
// Constructor with super()
// override 变量
class Person {
  String id;
  Person(this.id);
}
class User extends Person {
  String name;
  User(this.name, String id) : super(id);
}
/
// Constructor with this()
// 命名构造函数
class User {
  String name;
  int salary;
  User(this.name, this.salary);
  User.worker(String name) : this(name, 10);
  User.boss(String name) : this(name, 9999999);
}

私有构造函数ー Class._()

您可以使用 _ 创建私有构造函数,但是它的好处是什么呢?

让我们来看一个例子!

class Print {
  static void log(String message) => print(message);
}
Print.log('ehe');
// 你想写一个像这样的util,但有一个问题,因为你也可以创建一个我们不想要的实例。
Print(); // 在这种情况下,这是绝对不必要的
// 如何防止这种情况?答案是私有构造函数!
class Print {
  Print._(); // 这将阻止创建实例
  static void log(String message) => print(message);
}
Print(); // 这将给出现在的编译时错误
Your instance is safe now!

所以基本上你可以阻止创建一个实例!

命名构造函数ー class.Named()

您可以在一个 class 中创建不同类型的实例

For example;

例如:

class User {
  String name;
  int salary;
  User.worker(this.name) : salary = 10;
  User.boss(this.name) : salary = 99999999;
}

私有命名构造函数ー class._Named ()

您可以很容易地清洗您的实例!

class User {
  String name;
  int salary;
  User.worker(this.name) : salary = 10;
  User.boss(this.name) : salary = 99999999;
  User._mafia(this.name) : salary = 9999999999999;
}

除了玩笑之外,这是非常有帮助的!

例如,您可以使用私有构造函数创建单例对象!

class User {
  User._privateConstructor();
  static final User instance = User._privateConstructor();
}

注意

你可以在一些项目中看到 _internal 内部关键字。没什么特别的。_internal construction 只是一个 ._internal 通常给类私有的构造函数的名称(不需要这个名称)。可以使用任何 Class._someName 结构创建一个私有构造函数)。

Const Constructor ー const Class()

您可以使用 const constructor! 构造函数使类变为不可变的!

常量构造函数是一种优化!编译器使对象成为不可变的,为所有 Text('Hi!') 对象。ー Frank Treacy

const user = User('ehe');
class User {
  final String name;
  const User(this.name);
}

工厂构造函数ー factory class Class()

我们说过施工人员不允许回来,你猜怎么着?

工厂建造者可以!

工厂建造者还能做什么?

您根本不需要创建一个新实例!您可以调用另一个构造函数或子类,甚至可以从缓存返回一个实例!

最后,对工厂的小小警告!

无法调用超类构造函数 (super())

简单的例子

class User {
  final String name;
  User(this.name);
  factory User.fromJson(Map<String, dynamic> json) {
    return User(json["name"]);
  }
}
// Singleton Example
class User {
  User._internal();
  static final User _singleton = Singleton._internal();
  factory User() => _singleton;
}

以上就是Android开发Dart Constructors构造函数使用技巧整理的详细内容,更多关于Dart Constructors构造函数的资料请关注我们其它相关文章!

(0)

相关推荐

  • 谷歌Sky语言怎么样?什么是Dart编程语言?

    Q:谷歌Sky语言怎么样?Sky编程语言有哪些优势? A:Sky语言是谷歌近期推出的一款全新的自主网页编程语言Dart,谷歌推出Dart编程语言的目的是为了提升Android应用的流畅度.Sky语言的主要优势在于:可兼容iOS,为Android应用带来120fps的超级流畅体验. 作为当前市占率最高的智能手机操作系统,Android平台正在吸引着越来越多的开发者.不过,对用户而言,Android的体验还不够完善,卡顿的情况时有发生.再深入点理解,许多应用的帧率达不到普遍意义上流畅的标准60fps

  • 详解Flutter中Dart集合使用教程

    目录 前言 优先使用集合的特有语法 不要使用.length 属性判断集合是不是为空 避免使用 forEach 迭代元素 不要使用 List.from(),除非你想要更改结果的类型 使用 whereType 过滤类型 避免使用 cast() 做强制转换 总结 前言 集合是应用程序中最为常见的数据结构,Dart 一共支持如下四种集合,其中核心的 List, Map 和 Set 在基础框架中,而 Queue 在 dart:collection 库定义. 列表:也就是 List类,可动态增长的数组: k

  • 详解Flutter和Dart取消Future的三种方法

    目录 使用异步包(推荐) 完整示例 使用 timeout() 方法 快速示例 将Future转换为流 快速示例 结论 使用异步包(推荐) async包由 Dart 编程语言的作者开发和发布.它提供了dart:async风格的实用程序来增强异步计算.可以帮助我们取消Future的是CancelableOperation类: var myCancelableFuture = CancelableOperation.fromFuture( Future<T> inner, { FutureOr on

  • Google Dart编程语法和基本类型学习教程

    1. 变量声明 如何定义变量 复制代码 代码如下: var name = 'Bob'; 变量的初始值 复制代码 代码如下: int lineCount;assert(lineCount == null); // Variables (even numbers) are initially null. 可以使用var,也可以直接指定类型.final, 定义为final的变量,值不能够被更改 复制代码 代码如下: final name = 'Bob'; // Or: final String nam

  • Flutter 中 Dart的Mixin示例详解

    原文在这里.写的不错,推荐各位看原文. 这里补充一下Mixin的定义: 只要一个类是继承自Object的而且没有定义构造方法,那么这个类可以是一个Mixin了.当然,如果你想让mixin的定义更加的清晰,可以使用mixin关键字开头来定义.具体请参考这里 原文截图体会一下风格. 正文 在经典的面向对象编程语言里一定会有常规的类,抽象类和接口.当然,Dart也有它自己的接口,不过那是另外的文章要说的.有的时候阴影里潜伏者另外的野兽:Mixin!这是做什么的,如何使用?我们来一起发现. 没有mixi

  • Android开发Dart语言7个很酷的特点

    目录 参考 正文 Cascade 级联 Abstract 抽象类 Factory constructors 工厂建造者 Named 命名构造函数 Mixins 混合物 Typedefs Extension 扩展方法 unawaited_futures 参考 https://dart.dev/guides/language/language-tour 正文 今天的文章简短地揭示了 Dart 语言所提供的很酷的特性.更多时候,这些选项对于简单的应用程序是不必要的,但是当你想要通过简单.清晰和简洁来改

  • Android开发Dart Constructors构造函数使用技巧整理

    目录 参考 正文 什么是构造函数? 缺省构造函数 ー Class() 私有构造函数ー Class._() 命名构造函数ー class.Named() 私有命名构造函数ー class._Named () 工厂构造函数ー factory class Class() 参考 https://dart.dev/guides/language/language-tour#factory-constructors https://www.freecodecamp.org/news/constructors-i

  • Android开发中Flutter组件实用技巧

    目录 正文 简化 Assert 管理 更容易 imports 从按钮上移除飞溅效果 更简单的平台小工具 可见性小工具 正文 今天我将向您展示 4 个非常有用的 Flutter 技巧,您可以立即应用到您的项目.我不会向您展示任何包或扩展,就像我通常做的那样,但是非常简单,但是非常有用的提示! 简化 Assert 管理 管理 Assert 可能非常困难.如果你想在你的应用程序中多次使用一个图像,你必须一次又一次地指定路径.但是有一个简单得多的解决方案.创建一个 App Assets 类,用于存储所有

  • Android开发中的简单设置技巧集锦

    本文实例总结了Android开发中的简单设置技巧.分享给大家供大家参考,具体如下: 1开机图片: android-logo-mask.png android-logo-shine.png 这两个图片一个在上一个在下 ./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes/assets/images/android-logo-shine.png ./frameworks/base/core

  • Android开发实现的内存管理工具类

    本文实例讲述了Android开发实现的内存管理工具类.分享给大家供大家参考,具体如下: /*********************************************** * 内存管理工具 * * @author chen.lin * @version 1.0 ************************************************/ public class MemoryManager { private static final String TAG =

  • Android开发组件flutter的20个常用技巧示例总结

    目录 1.map遍历快速实现边距,文字自适应改变大小 2.使用SafeArea 添加边距 3.布局思路 4.获取当前屏幕的大小 5.文本溢出显示省略号 6.一个圆角带搜索icon的搜索框案例 7.修改按钮的背景色 8.tab切换实例 9.点击事件组件点击空白区域不触发点击 10.使用主题色 11.往安卓模拟器中传图片 12.控制text的最大行数显示影藏文字 13.去掉默认的抽屉图标 14.图片占满屏 15.倒计时 16.固定底部 17.添加阴影 18.隐藏键盘 19.获取父级组件大小 20.点

  • 解析Android开发优化之:从代码角度进行优化的技巧

    通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的.一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构.重构的好处有很多,其中一点,就是对代码进行优化,提高软件的性能.下面我们就从几个方面来了解Android开发过程中的代码优化. 1)静态变量引起内存泄露 在代码优化的过程中,我们需要对代码中的静态变量特别留意.静态变量是类相关的变量,它的生命周期是从这个类被声明,到这个类彻底被垃圾回收器回收才会被销毁.所以,一般情况下,静态变量

  • Android开发小技巧篇之集合

    1.对于过多的控件,功能类似,数量又多的,可以用include方法.在实现应用中,可以把控件放入List集合中. private void initView() { // TODO Auto-generated method stub pwd1 = (EditText) findViewById(R.id.pwd_et_6_1); pwd2 = (EditText) findViewById(R.id.pwd_et_6_2); pwd3 = (EditText) findViewById(R.i

  • Android开发ProGuard使用技巧掌握

    目录 前言 什么是 ProGuard? 它对我们的应用程序有什么用处? 如何在我们的项目中使用它? 前言 在构建 Android 应用程序时,我们可能在项目中使用了 ProGuard.在这篇文章中,我们将了解所有功能以及如何在 Android 中有效地使用 ProGuard. 因此,让我们将其分解为以下几点: 什么是 ProGuard? ProGuard 是 Android 中的免费 java 工具,它可以帮助我们执行以下操作, 缩小(缩小)代码:删除项目中未使用的代码. 混淆代码:重命名类.字

  • Android 开发与代码无关技巧详解

    目录 1.如何找到代码 (1)无敌搜索大法 (2)log输出大法 (3)profiler查看大法 (4)万能法找到页面 2.如何解决bug (1)先看再想最后动手 (2)改变现状 (3)是技术问题还是业务问题 (4)张张嘴远胜于动动手 (5)bug解决不了,那就解决提出bug的人 (6)解决了bug之后 3.如何实现不会的功能 (1)不要急着拒绝 (2)大事化小小事化了 心态要稳,天塌了有个高的顶着 1.如何找到代码 作为客户端的开发,工作中经常遇到,后端的同事来帮忙找接口详情.产品经理来询问之

随机推荐