Примечание: Этот вопрос устарел; синтаксис объявления
interface
был удален из Dart:
Предложение об исключении объявлений интерфейса от Dart
"В Dart каждый класс порождает неявный интерфейс. Теперь, когда эта функция реализована, можно фактически исключить объявления интерфейса из языка. Декларации интерфейса заменяются чисто абстрактными классами".Проблема 3972: удаление поддержки декларации интерфейса в виртуальной машине
Насколько я мог сказать, невозможно создать экземпляр интерфейса в Dart. Если я просто попытаюсь построить new MyInterface()
с определением конструктора или без него, я получаю ошибку времени выполнения (попробуйте):
NoSuchMethodException - receiver: '' function name: 'MyInterface$$Factory' arguments: []]
interface MyInterface {}
interface MyInterface {
MyInterface();
}
Если я попытаюсь использовать конструктор factory вместо этого, возвращая экземпляр реализации, я получаю ошибку времени компиляции (попробуйте):
SyntaxError: factory members are not allowed in interfaces
class MyImplementation implements MyInterface {
MyImplementation();
}
interface MyInterface {
factory MyInterface() { return new MyImplementation(); }
}
Однако это, по-видимому, противоречит реальности, что List<E>
1 в Dart core library - это интерфейс 2 но он имеет несколько конструкторов и может быть инстанцирован, Например, это работает отлично (попробуйте):
main() {
var list = new List();
list.add(5);
print(list.last());
}
Почему List
и многие другие встроенные интерфейсы должны быть созданы? Есть ли какой-то метод, который я пропустил, или они просто получают специальное лечение как встроенные типы?
1Dart: Библиотеки: corelib: interface List <E>
2 "Большая часть Dart Core Library определена в терминах интерфейсов". 3
3Dart: Tutorial: Интерфейсы