Dart学习(六)
mixins
mixins可以实现类似多继承的功能。
mixins的特点:
- 作为mixins的类只能继承自Object,不能继承其他类;
- 作为mixins的类不能有构造函数;
- 一个类可以mixins多个mixins类,如果当前类extends的类和mixins的多个类中有同名方法,这个类创建的实例调用mixins中有这个方法的最后一个类;
- mixins不是继承,也不是接口,而是一种新特性;
// 定义一个Mixin类A
mixin A {
void hello() {
print('Hello from A');
}
}
// 定义一个Mixin类B
mixin B {
void hello() {
print('Hello from B');
}
}
// 定义一个父类Base
class Base {
void hello() {
print('Hello from Base');
}
}
// 定义一个继承Base类和混入A和B类的子类C
class C extends Base with A, B {}
void main() {
var c = C();
c.hello(); // 输出: Hello from B
}
注:mixins的类型是其超类的子类型,上述例子中的实例c is A或者is B都为true。
泛型
Dart中的泛型与ts类似,用于解决类,接口,方法的复用性,对不确定类型的支持(类型校验)。
// 使用泛型的类
class Box<T> {
T _value;
void add(T value) {
_value = value;
}
T get() {
return _value;
}
}
void main() {
Box<String> stringBox = Box<String>();
stringBox.add('Hello');
print(stringBox.get());
Box<int> intBox = Box<int>();
intBox.add(123);
print(intBox.get());
}
// 使用泛型的接口
abstract class Repository<T> {
Future<T> getById(int id);
Future<List<T>> getAll();
Future<T> add(T item);
Future<void> update(T item);
Future<void> delete(int id);
}
class UserRepository implements Repository<User> {
Future<User> getById(int id) {
//实现代码
}
Future<List<User>> getAll() {
//实现代码
}
Future<User> add(User item) {
//实现代码
}
Future<void> update(User item) {
//实现代码
}
Future<void> delete(int id) {
//实现代码
}
}
class User {
int id;
String name;
String email;
User({this.id, this.name, this.email});
}