我最近从Dart 2迁移到Dart 3,并注意到添加了类修饰符,包括接口类。它们在设置属性时工作得非常好,但是当涉及到方法时,它会抛出一个错误,指出我需要将类转换为抽象类。基于逻辑,我理解接口不应该有方法体。下面是一个例子:
工作正常:
interface class Foo {
late String bar;
}
抛出dartconcrete_class_with_abstract_member:
interface class Foo {
late String bar;
// 'getFormattedBar' must have a method body because 'Foo' isn't abstract.
// Try making 'Foo' abstract, or adding a body to 'getFormattedBar'.
// (dartconcrete_class_with_abstract_member)
String getFormattedBar();
}
如何在Dart 3中声明接口方法?
我希望在接口中定义方法(当然是按照接口的定义),然后在实现类中用它们各自的主体建立它们的具体实现。相反,我被迫在接口中放置一个空的主体,这没有任何意义。最好有这样的东西:
interface class Foo {
late String bar;
String getFormattedBar();
}
3条答案
按热度按时间uqzxnwby1#
interface
关键字确保您只能implement
类,而不是mixin
或extend
类。或者换句话说,它确保您不能从类继承。如果
interface
类修饰符是唯一使用的类修饰符,则仍然可以构造类。这意味着这些方法需要有一个具体的实现。如果您还添加了
abstract
类修饰符,则无法构造类,并且方法不必具有具体的实现。rkkpypqq2#
要在接口中包含方法,必须使用
abstract interface class
,而不仅仅是interface class
。这将允许您在接口中包含没有主体的方法(这有点多余)。示例:
pbwdgjma3#
在DartDart 2中,你像这样声明你的接口;
然后像这样实施;
在 dart 3中: