Dart小记

Jared Yuan Lv2

泛型方法:

  • dart 的泛型方法书写和 Java 的不太一样。
  1. Dart 的泛型方法
1
2
3
4
5
6
T first<T>(List<T> ts) {
// 进行一些初始工作或错误检查,然后...
T tmp = ts[0];
// 进行一些额外的检查或处理...
return tmp;
}

Tips

表示这是一个泛型方法,T 是类型参数的名称,

  1. Java 的泛型方法
1
2
3
4
5
6
7
<T> T first(List<T> ts) {
// 进行一些初始工作或错误检查,然后...
T tmp = ts.get(0);
// 进行一些额外的检查或处理...
return tmp;
}
<T> 位于方法返回类型之前,表示这是一个泛型方法,T 是类型参数的名称,可以替换成其他合法的标识符。

Mixin(混入)

Tips

作用:解决无需多重继承即可拥有功能方法
混合使用 with 关键字,with 后面可以是 class、abstract class 和 mixin 的类型

1
2
3
4
5
6
7
8
9
10
11
// mixin 声明的类
mixin a {

}

// 普通的类
class b {

}

class c with a, b {}
  • 混入(with)多类,遇到同名方法的情况,按照混入的顺序,后面的会覆盖前面
  • mixin 的类无法定义构造函数,所以一般会将需要 mixin 的类使用 mixin 关键字
  • 使用关键字 on 限定混入条件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Person {
eat(){
print("eat");
}
}

class Dog {

}

/// 使用关键字 on 限定 Code 只能被 Person 或者其子类 mixin
/// 添加限定后,可以重写其方法, Code 重写 Person 的方法
/// super 表示调用父类(Person)的方法。
mixin Code on Person {
@override
eat(){
super.eat();
}
}
  • 混合后的类型是超类的子类型(类似多继承)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class F {

}

class G {

}

class H {

}

class FG extends H with F,G {}

FG fg = FG();
/_
fg is F: true
fg is G: true
fg is H: true
_/

  • 调用非默认超类构造函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Person {
String? firstName;

Person.fromJson(Map data) {
print('in Person');
}
}

class Employee extends Person {
// Person does not have a default constructor;
// you must call super.fromJson().
Employee.fromJson(super.data) : super.fromJson() {
print('in Employee');
}
}

void main() {
var employee = Employee.fromJson({});
print(employee);
// Prints:
// in Person
// in Employee
// Instance of 'Employee'
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Vector2d {
final double x;
final double y;

Vector2d(this.x, this.y);
}

class Vector3d extends Vector2d {
final double z;

// Forward the x and y parameters to the default super constructor like:
// Vector3d(final double x, final double y, this.z) : super(x, y);
Vector3d(super.x, super.y, this.z);
}

  • Title: Dart小记
  • Author: Jared Yuan
  • Created at : 2023-09-22 11:41:25
  • Updated at : 2023-09-22 12:07:32
  • Link: https://redefine.ohevan.com/2023/09/22/Dart小记/
  • License: This work is licensed under CC BY-NC-SA 4.0.
On this page
Dart小记