注意:此问题已过时;
interface
声明语法已从 Dart 中删除:
从 Dart 中消除接口声明的建议
“在 Dart 中,每个类都会产生一个隐式接口。现在实现了这个功能,实际上可以从语言中消除接口声明。接口声明被纯粹的抽象类所取代。”
据我所知,在Dart中实例化接口是不可能的。如果我只是尝试构造 a new MyInterface()
,无论是否定义了构造函数,我都会收到运行时错误(尝试一下):
NoSuchMethodException - receiver: '' function name: 'MyInterface$$Factory' arguments: []]
interface MyInterface {}
interface MyInterface {
MyInterface();
}
如果我尝试使用工厂构造函数,返回一个实现的实例,我会得到一个编译时错误(试试看):
SyntaxError: factory members are not allowed in interfaces
class MyImplementation implements MyInterface {
MyImplementation();
}
interface MyInterface {
factory MyInterface() { return new MyImplementation(); }
}
List<E>
然而,这似乎与 Dart 核心库中的1是一个接口2的现实相矛盾,但它有多个构造函数并且可以实例化。例如,这很好用(试试看):
main() {
var list = new List();
list.add(5);
print(list.last());
}
为什么可以List
和许多其他内置接口实例化?是否有一些我错过的方法,或者他们只是作为内置类型接受特殊处理?
1 Dart: Libraries: corelib: interface List<E>
2 “Dart 核心库的大部分内容是根据接口定义的。” 3
3 Dart:教程:接口