Почему можно создать экземпляр встроенного в Dart интерфейса List?

Примечание: Этот вопрос устарел; объявление interface синтаксис был удален из Dart:


Насколько я могу судить, невозможно создать экземпляр интерфейса в 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: Учебное пособие: Интерфейсы

12
задан Jeremy Banks 18 February 2014 в 00:49
поделиться