Mic*_*jer 3 abstract-class abstract dart
在许多语言中,如果您尝试实例化抽象类,则会出现编译时错误.但是在Dart中,在编译和运行时异常时会收到警告AbstractClassInstantiationError
.
这是为什么?有人可以提供一个例子,编译这样的代码是合理的吗?
看来答案是抽象类中的工厂构造函数:
abstract class Foo {
factory Foo() { // make Foo appear to be instantiable
return new Bar();
}
some(); // some abstract method
Foo.name() {} just a named constructor
}
class Bar extends Foo {
Bar():super.name(); // call named super constructor
some() {} // implement abstract method
}
main() {
print(new Foo()); // "instantiate" abstract Foo
}
Run Code Online (Sandbox Code Playgroud)
输出:
Instance of 'Bar'
Run Code Online (Sandbox Code Playgroud)
Dart尝试允许您在开发程序时运行程序.这就是为什么许多其他语言中的编译时错误都是Dart中的编译时警告和运行时错误的原因.这包括"x is Foo",其中Foo不存在,使用不存在的类型进行类型注释,以及调用部分(抽象)类的构造函数.
简而言之:因为它不是一个阻止程序编译的问题(不像语法错误可能意味着文件的其余部分被错误地解释),所以没有理由阻止你运行代码.只有当你点击实际取决于问题的分支时才会停止你的程序.
归档时间: |
|
查看次数: |
798 次 |
最近记录: |