返回

面向对象的Dart类型系统

Android

Dart 是一种面向对象的编程语言,支持面向对象编程的五大支柱。

Dart 里的类型又可分为原生类型、泛型类型和特殊类型。

原生类型包括:bool、int、num、double、String、List、Map、Set、Rune、Symbol。

  • bool :布尔类型,可取值 true 或 false。
  • int :整数类型,可取值范围为 -2^63 到 2^63-1。
  • num :数字类型,可表示整数或浮点数。
  • double :浮点数类型,可表示小数。
  • String :字符串类型,可表示一段文本。
  • List :列表类型,可存储多个元素,元素可以是任何类型。
  • Map :映射类型,可将键映射到值,键和值可以是任何类型。
  • Set :集合类型,可存储多个不重复的元素,元素可以是任何类型。
  • Rune :字符类型,可表示一个 Unicode 字符。
  • Symbol :符号类型,可表示一个唯一的标识符。

泛型类型是在原生类型基础上派生出来的类型,可用于表示一组具有相同特征的类型。

特殊类型包括:

  • dynamic :动态类型,可表示任何类型。
  • void :空类型,表示没有类型。
  • Never :从不类型,表示永远不会发生的情况。

泛型

泛型类型允许开发人员定义可用于多种类型的数据结构和算法。泛型类型使用尖括号 <> 来表示,尖括号内是泛型类型参数。泛型类型参数可以是任何类型,包括原生类型、泛型类型和特殊类型。

例如,以下代码定义了一个泛型类型 List<T>,它表示一个可以存储任何类型元素的列表:

class List<T> {
  List();
  void add(T value);
  T removeAt(int index);
  T operator[](int index);
}

以下代码创建一个 List<int> 列表,并向其中添加一些整数:

List<int> numbers = List<int>();
numbers.add(1);
numbers.add(2);
numbers.add(3);

接口

接口是定义一组方法和属性的契约。接口可以被类或其他接口实现。

例如,以下代码定义了一个 Comparable 接口,它定义了一个 compareTo 方法,该方法用于比较两个对象的大小:

interface Comparable<T> {
  int compareTo(T other);
}

以下代码定义了一个 Person 类,它实现了 Comparable 接口:

class Person implements Comparable<Person> {
  String name;
  int age;

  Person(this.name, this.age);

  @override
  int compareTo(Person other) {
    return name.compareTo(other.name);
  }
}

继承

继承允许一个类从另一个类派生,派生类继承了基类的所有成员,包括属性、方法和构造函数。

例如,以下代码定义了一个 Employee 类,它从 Person 类派生:

class Employee extends Person {
  String company;

  Employee(String name, int age, String company) : super(name, age) {
    this.company = company;
  }
}

以下代码创建了一个 Employee 对象:

Employee employee = Employee("John", 30, "Google");

多态

多态允许一个变量引用不同类型的对象,只要这些对象都实现了相同的接口或派生自相同的基类。

例如,以下代码定义了一个 printName 函数,它可以打印任何实现了 Comparable 接口的对象的名称:

void printName(Comparable<T> object) {
  print(object.name);
}

以下代码调用 printName 函数,分别打印 Person 对象和 Employee 对象的名称:

Person person = Person("John", 30);
Employee employee = Employee("John", 30, "Google");

printName(person);
printName(employee);

总结

Dart 是一种面向对象的编程语言,支持面向对象编程的五大支柱。Dart 里的类型又可分为原生类型、泛型类型和特殊类型。泛型类型允许开发人员定义可用于多种类型的数据结构和算法。接口是定义一组方法和属性的契约。继承允许一个类从另一个类派生,派生类继承了基类的所有成员。多态允许一个变量引用不同类型的对象,只要这些对象都实现了相同的接口或派生自相同的基类。