欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android開發(fā)Dart?Constructors構(gòu)造函數(shù)使用技巧整理

 更新時(shí)間:2022年05月16日 16:53:45   作者:會(huì)煮咖啡的貓咪  
這篇文章主要為大家介紹了Android開發(fā)Dart?Constructors構(gòu)造函數(shù)使用技巧整理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

參考

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 構(gòu)造函數(shù)的一些使用技巧

首先

什么是構(gòu)造函數(shù)?

構(gòu)造函數(shù)是用于初始化對(duì)象的特殊方法。在創(chuàng)建類的對(duì)象時(shí)調(diào)用構(gòu)造函數(shù)。

默認(rèn)情況

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

在構(gòu)造函數(shù)中只有一個(gè)規(guī)則

也就是說(shuō);

與它的類名一樣命名它! !

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

我們具體有哪些類型的構(gòu)造函數(shù)類型?

缺省構(gòu)造函數(shù) ー Class()

// Default Constructor
// 默認(rèn)什么都不做
class User {
  String name = 'ehe';
  User();
}
///
// Constructor with parameters
// 構(gòu)造時(shí)初始變量
class User {
  String name;
  User(this.name);
}
///
// Constructor with the initial method
// 構(gòu)造函數(shù)內(nèi)寫入你的邏輯
class User {
  String name;
  User(this.name) {
    // do some magic
  }
}
/
// Constructor with assertion
// 使用 Asserts 去檢查你的規(guī)則
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()
// 命名構(gòu)造函數(shù)
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);
}

私有構(gòu)造函數(shù)ー Class._()

您可以使用 _ 創(chuàng)建私有構(gòu)造函數(shù),但是它的好處是什么呢?

讓我們來(lái)看一個(gè)例子!

class Print {
  static void log(String message) => print(message);
}
Print.log('ehe');
// 你想寫一個(gè)像這樣的util,但有一個(gè)問(wèn)題,因?yàn)槟阋部梢詣?chuàng)建一個(gè)我們不想要的實(shí)例。
Print(); // 在這種情況下,這是絕對(duì)不必要的
// 如何防止這種情況?答案是私有構(gòu)造函數(shù)!
class Print {
  Print._(); // 這將阻止創(chuàng)建實(shí)例
  static void log(String message) => print(message);
}
Print(); // 這將給出現(xiàn)在的編譯時(shí)錯(cuò)誤
Your instance is safe now!

所以基本上你可以阻止創(chuàng)建一個(gè)實(shí)例!

命名構(gòu)造函數(shù)ー class.Named()

您可以在一個(gè) class 中創(chuàng)建不同類型的實(shí)例

For example;

例如:

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

私有命名構(gòu)造函數(shù)ー class._Named ()

您可以很容易地清洗您的實(shí)例!

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

除了玩笑之外,這是非常有幫助的!

例如,您可以使用私有構(gòu)造函數(shù)創(chuàng)建單例對(duì)象!

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

注意

你可以在一些項(xiàng)目中看到 _internal 內(nèi)部關(guān)鍵字。沒什么特別的。_internal construction 只是一個(gè) ._internal 通常給類私有的構(gòu)造函數(shù)的名稱(不需要這個(gè)名稱)??梢允褂萌魏?Class._someName 結(jié)構(gòu)創(chuàng)建一個(gè)私有構(gòu)造函數(shù))。

Const Constructor ー const Class()

您可以使用 const constructor! 構(gòu)造函數(shù)使類變?yōu)椴豢勺兊模?/p>

常量構(gòu)造函數(shù)是一種優(yōu)化!編譯器使對(duì)象成為不可變的,為所有 Text('Hi!') 對(duì)象。ー Frank Treacy

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

工廠構(gòu)造函數(shù)ー factory class Class()

我們說(shuō)過(guò)施工人員不允許回來(lái),你猜怎么著?

工廠建造者可以!

工廠建造者還能做什么?

您根本不需要?jiǎng)?chuàng)建一個(gè)新實(shí)例!您可以調(diào)用另一個(gè)構(gòu)造函數(shù)或子類,甚至可以從緩存返回一個(gè)實(shí)例!

最后,對(duì)工廠的小小警告!

無(wú)法調(diào)用超類構(gòu)造函數(shù) (super())

簡(jiǎn)單的例子

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開發(fā)Dart Constructors構(gòu)造函數(shù)使用技巧整理的詳細(xì)內(nèi)容,更多關(guān)于Dart Constructors構(gòu)造函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺談Android實(shí)踐之ScrollView中滑動(dòng)沖突處理解決方案

    淺談Android實(shí)踐之ScrollView中滑動(dòng)沖突處理解決方案

    涉及到了ViewPager,MapView,ListView,就需要ScrollView來(lái)做一下支援,這篇文章主要介紹了淺談Android實(shí)踐之ScrollView中滑動(dòng)沖突處理解決方案,有需要的可以來(lái)了解一下。
    2016-12-12
  • Kotlin伴隨對(duì)象的初始化方法示例講解

    Kotlin伴隨對(duì)象的初始化方法示例講解

    Kotlin語(yǔ)言的許多特性,包括變量不可變,變量不可為空,等等。這些特性都是為了盡可能地保證程序安全而設(shè)計(jì)的,但是有些時(shí)候這些特性也會(huì)在編碼時(shí)給我們帶來(lái)不少的麻煩,下面我們來(lái)了解伴隨對(duì)象的初始化
    2022-11-11
  • Android?ViewPager你可能不知道的刷新操作分享

    Android?ViewPager你可能不知道的刷新操作分享

    這篇文章主要為大家詳細(xì)介紹了Android中ViewPager你可能不知道的刷新操作,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下
    2023-05-05
  • 詳解Android之圖片加載框架Fresco基本使用(二)

    詳解Android之圖片加載框架Fresco基本使用(二)

    本篇文章主要介紹了Android之圖片加載框架Fresco基本使用,可以實(shí)現(xiàn)進(jìn)度條和圖片縮放等內(nèi)容,有興趣的可以了解一下。
    2016-12-12
  • Android實(shí)現(xiàn)為Notification加上一個(gè)進(jìn)度條的方法

    Android實(shí)現(xiàn)為Notification加上一個(gè)進(jìn)度條的方法

    這篇文章主要介紹了Android實(shí)現(xiàn)為Notification加上一個(gè)進(jìn)度條的方法,結(jié)合實(shí)例形式分析了Android針對(duì)Notification組件的相關(guān)操作技巧,需要的朋友可以參考下
    2016-10-10
  • flutter ExpansionTile 層級(jí)菜單的實(shí)現(xiàn)

    flutter ExpansionTile 層級(jí)菜單的實(shí)現(xiàn)

    這篇文章主要介紹了flutter ExpansionTile 層級(jí)菜單的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Android富文本實(shí)現(xiàn)的幾種方式匯總

    Android富文本實(shí)現(xiàn)的幾種方式匯總

    由于項(xiàng)目中需要使用到富文本顯示和編輯,索性整理下,這篇文章主要給大家介紹了關(guān)于Android富文本實(shí)現(xiàn)的幾種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 老生常談Listview中onItemClick中的各個(gè)參數(shù)(推薦)

    老生常談Listview中onItemClick中的各個(gè)參數(shù)(推薦)

    下面小編就為大家?guī)?lái)一篇老生常談Listview中onItemClick中的各個(gè)參數(shù)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • android實(shí)現(xiàn)可自由移動(dòng)、監(jiān)聽點(diǎn)擊事件的懸浮窗

    android實(shí)現(xiàn)可自由移動(dòng)、監(jiān)聽點(diǎn)擊事件的懸浮窗

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)可自由移動(dòng)、監(jiān)聽點(diǎn)擊事件的懸浮窗,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android音頻系統(tǒng)AudioTrack使用方法詳解

    Android音頻系統(tǒng)AudioTrack使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Android音頻系統(tǒng)AudioTrack的使用方法,如何使用AudioTrack進(jìn)行音頻播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評(píng)論