强制子类实现抽象重写方法



我有一个抽象类,其中包含一些子类需要实现的抽象方法。

abstract class BlockData {
Widget build();
BlockData get value;
}
class NumberData extends BlockData {
NumberData(Function updateCallback) : super(updateCallback);
// trying to remove either of the below methods throws a compiler error as expected
@override
BlockWidget build() {
// TODO: implement build
throw UnimplementedError();
}
@override
BlockData get value => this;
}

正如预期的那样,我的子类被迫实现它们。但是,我也想强制我的类实现一个自定义的==hashcode方法。当我用抽象实现重写抽象类中的这些方法时,它们将被完全忽略,并且允许子类不实现它们。

abstract class BlockData {
Widget build();
BlockData get value;
@override
bool operator ==(other);
@override
int get hashCode;
}
// this should throw an error since it doesn't implement == or hashcode, but it doesn't
class NumberData extends BlockData {
NumberData(Function updateCallback) : super(updateCallback);
@override
BlockWidget build() {
// TODO: implement build
throw UnimplementedError();
}
@override
BlockData get value => this;
}

这与Java中的行为不同,在Java中,您可以创建一个抽象方法来覆盖超类并强制子类具有自定义实现。有没有办法在达特身上强制这样做,就这一点而言,这是预期的行为吗?

你不能。请求在package:meta中添加@mustOverride注释(另请参阅https://github.com/dart-lang/sdk/issues/28250)。

抽象类中的空方法声明也应该不会从基类中隐藏默认实现。

你可以像一样

FutureOr<void> myFunction();

并且它将强制任何继承者覆盖它

最新更新