具体情况如下:
abstract class A {
void doSomething() => print('Do something..');
}
class B implements A {
@override
void doSomething() => print('Do something already..');
}
class C extends A {
}
字符串
我有一个抽象类A。类B实现了A。因此它覆盖了doSomething()方法。类C扩展了A。
一切正常,直到我添加工厂构造函数到类A:
abstract class A {
factory A() => new B();
void doSomething() => print('Do something..');
}
型
这会导致我的IDE(IntelliJ IDEA)中出现错误:
需要生成构造函数,但找到工厂
我的第一个想法是为类C创建构造函数,在那里我将调用类A的工厂构造函数。
当我尝试扩展Exception类时,也遇到了同样的问题。它也有一个工厂构造函数:
abstract class Exception {
factory Exception([var message]) => new _ExceptionImplementation(message);
}
型
这就是为什么要创建我的自定义异常,我必须实现Exception类,而不是扩展它,这真的让我很困惑。
我还想澄清一个术语问题。我是否可以说,从B类的Angular 来看,A是一个接口,因此B实现了接口A。但是,从C类的Angular 来看,A是一个抽象类,因此C扩展了抽象类A。这些说法正确吗?
谢谢
德米特里。
2条答案
按热度按时间mbjcgjjk1#
如果一个类没有构造函数,则隐式添加生成构造函数。如果一个类有显式构造函数,则不添加生成构造函数。您有两种选择。
字符串
型
尝试DartPad
你的陈述是正确的。如果你实现一个类,它就像一个接口,如果你扩展它,它就像一个基类。
wbgh16ku2#
我不知道它是否有效,但它解决了我的问题。我知道有很多解决方案,这可能是这个解决方案最糟糕的。:)但我想与你分享
有时候后端API返回相同的模型,但是不同的值。像这样。
字符串
我需要的
D
模型,所以从D
扩展其他型号型
从
D
扩展模型型
并在其他类
C
中编写factory
构造函数型
我用了:)
的字符串