【发布时间】:2020-10-28 20:33:15
【问题描述】:
有没有办法像在 PHP 中使用 static::class 那样将方法的返回类型或对象前缀声明为“extendingClass”?
例如:
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 的返回类型是什么,但我知道它对于给定的孩子总是相同的类型。此外,save 方法的返回类型始终是子类。但是当这样写时,我会收到一个错误,因为用无效的返回类型覆盖modelProvider。
由于飞镖类 javascript 的性质,我认为没有办法像在 PHP 中那样实际实现这一点。但后来我想知道如何键入保存构建可重用的代码?我正在尝试为我的模型实现一个像查询方案这样的小雄辩,所以我不必为每个模型编写每个 CRUD 方法 - 但我仍然希望准确了解类型,而不是在任何地方使用 dynamic。
那么有没有办法在飞镖中做到这一点,还是我完全偏离了飞镖标准?
【问题讨论】:
标签: flutter dart inheritance