Примечание: Этот вопрос устарел; объявление
interface
синтаксис был удален из Dart:
Предложение исключить объявления интерфейсов из Dart
«В Dart каждый класс порождает неявный интерфейс. Теперь, когда эта функция реализована, можно фактически исключить из языка объявления интерфейсов. Объявления интерфейсов заменены чисто абстрактными классами. "Проблема 3972: Удаление поддержки объявления интерфейса в VM
Насколько я могу судить, невозможно создать экземпляр интерфейса в Dart . Если я просто попытаюсь создать
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
1 в основной библиотеке Dart - это интерфейс 2 , но он имеет несколько конструкторов и может быть создан.Например, это работает нормально ( попробуйте ):main() { var list = new List(); list.add(5); print(list.last()); }
Почему можно создать экземпляры
List
и многих других встроенных интерфейсов? Есть ли какой-то метод, который я пропустил, или они просто обрабатываются как встроенные типы?1 Dart: Libraries: corelib: interface List
2 "Большая часть ядра Dart Библиотека определяется в терминах интерфейсов. " 3
3 Dart: Учебное пособие: Интерфейсы