Подтип дротика и аргументы метода - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь понять, как работает система типа Дарт. Вот фрагмент:

class Base {}

class Derived extends Base {}

void f(Derived x) {}

void main() {
  Base x = Base();
  f(x);
}

По крайней мере, на https://dartpad.dartlang.org/ это компилируется и выдает следующую ошибку времени выполнения:

Uncaught exception:
TypeError: Instance of 'Base': type 'Base' is not a subtype of type 'Derived'

Очевидно, что метод, принимающий упорядоченный набор, не можетпринять только общий набор.

Разве это не должно быть чем-то, что можно поймать во время компиляции? Существуют ли какие-либо флаги компиляции, чтобы компилятор мог обнаруживать такие ошибки?

UPD: вот еще более простой пример:

void main() {
  num a = 2.5;
  int b = a;
}

1 Ответ

0 голосов
/ 16 октября 2019

Здесь есть открытый вопрос об этом поведении: https://github.com/dart-lang/sdk/issues/30052

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

analyzer:
  strong-mode:
    implicit-casts: false
...