gpt4 book ai didi

flutter - 如何根据dartlang中的扩展类设置类型定义

转载 作者:行者123 更新时间:2023-12-03 04:33:07 25 4
gpt4 key购买 nike

有没有一种方法可以将方法的返回类型或对象前缀声明为“extendingClass”,就像在PHP中使用static::class那样?
因此,例如:

abstract class AbstractModel {

// Should return the database-provider for the given model
dynamic get modelProvider;

// Save instance to Database - Create new if no ID exists,
// else update existing
dynamic save() {
if( id == null ) {
modelProvider.insert(this);
} else {
modelProvider.update(this);
}
return this;
}
}

class ToDo extends AbstractModel {
ToDoProvider get modelProvider {
return ToDoProvider;
}
}
因此,在此示例中,显然 AbstractModel尚不知道 modelProvider的返回类型是什么,但我确实知道对于给定的 child ,它将始终是相同的类型。同样, save方法的返回类型将始终是子类。但是当以这种方式编写时,如果使用无效的返回类型覆盖 modelProvider,我将得到一个错误。
由于dart类似于javascript,因此我认为没有办法像PHP那样实际实现这一目标。但是然后我想知道如何类型化保存可重复使用的代码?我正在尝试为我的模型实现一个 Eloquent 查询语句,这样我就不必为每个模型编写每种CRUD方法了-但是我仍然想精确了解类型,而不是在各处都使用 dynamic
那么有没有办法用 Dart 做到这一点,或者我是否完全脱离 Dart 标准?

最佳答案

您可以使用泛型:

abstract class AbstractModel<ChildType extends AbstractModel<ChildType>> {

// Should return the database-provider for the given model
ModelProvider<ChildType> get modelProvider;

// Save instance to Database - Create new if no ID exists,
// else update existing
ChildType save() {
if( id == null ) {
modelProvider.insert(this);
} else {
modelProvider.update(this);
}
return this;
}
}

class Model extends AbstractModel<Model> {
}

abstract class ModelProvider<T> {
void insert(T value);
void update(T value);
}

class MyModelProvider extends ModelProvider<Model> {
...
}

关于flutter - 如何根据dartlang中的扩展类设置类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64580875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com