Dart 中構造函數定義與使用詳解

1、普通類

   1. 一個類能夠不定義構造函數json

class Person{
    String firstName;
    String lastName;
}

在這種沒有構造函數的狀況下Dart會爲其隱式定義一個默認構造函數(與類名相同、無參數)數組

Person(){  // 隱式無參構造函數,
}

2.定義有參構造函數函數

class Person{
     String firstName;
     String lastName;  
  
     Person(String firstName,String lastName){  // 有參構造函數,
        this.firstName = firstName;
        this.lastName  = lastName;
     }
}

3.定義命名(有名字)構造函數this

import 'dart:convert';
class Person{
     String firstName;
     String lastName;  
  
     Person.fromJson(Map data){  // 命名構造函數,
          //Json格式的數據使用 'dart:convert'庫,原生Json只支持轉換爲list數組或map對象,這裏咱們轉換爲map對象
          this.firstName = data["firstName"];  //將map中的數據賦值給firstName屬性
     }
}

main() {

 String s= '{"firstName": "Job"}';  //json字符串
 Map map =  JSON.decode(s);  //解析字符串並返回map對象 

 var p = new Person.fromJson(map);  //使用命名構造函數
  print(p.firstName);
}

注:定義了命名構造函數,若不定義無參構造函數,則Dart不會自動定義默認構造函數,即:實例化時不能使用: new Person()(若須要這樣實例化,必須手動提供); 只能使用 new Person.fromJson(map);見以下所示:spa

import 'dart:convert';
class Person{
     String firstName;
     String lastName;  
     Person(){}  // 手動提供無參構造函數
     Person.fromJson(Map data){  // 命名構造函數,
          //Json格式的數據使用 'dart:convert'庫,原生Json只支持轉換爲list數組或map對象,這裏咱們轉換爲map對象
          this.firstName = data["firstName"];  //將map中的數據賦值給firstName屬性
     }
}

main() {

 String s= '{"firstName": "Job"}';  //json字符串
 Map map =  JSON.decode(s);  //解析字符串並返回map對象 

 var p1 = new Person.fromJson(map);  //使用命名構造函數
 var p2 = new Person();   //使用無參構造
  print(p1.firstName);
}

2、具備繼承結構的類code

相關文章
相關標籤/搜索