Наследование класса дротиков в типе функции карты - PullRequest
0 голосов
/ 03 апреля 2019
class A {}
class B extends A {}

void fA(A a) {}
void fB(B b) {}

final Map<String, void Function(A)> m = {'test': fB};

В приведенном выше примере назначение fA на 'test' работает, но fB генерирует ошибку:

Тип элемента '(B) → void' не может быть присвоен типу значения карты '(A) → void'.

Есть ли способ указать, что тип значения - это функция, которая принимает параметр, который является или расширяется A?

Я также пытался void Function<T extends A>(T), но это приводит к другой ошибке:

Универсальная функция не может быть аргументом типа.

Единственный способ, с помощью которого я нашел проект для компиляции, - это приведение значения при его присвоении, что, похоже, не соответствует цели проверки типа, поскольку тип значения также может быть dynamic в этом случае:

final Map<String, void Function(A)> m = {
  'test': fB as void Function(A),
};

1 Ответ

0 голосов
/ 03 апреля 2019

Возможно, стоит записаться как ошибка компилятора Dart.

...