Проверка типа Dart с помощью дженериков

#dart

#dart

Вопрос:

У меня есть класс:

   class StreamWithValue<T> extends Stream<T> {
  T value;
  ...
  }
  

и теперь:

   Stream<bool> _stream;
  StreamWithValue<bool> get stream=> _stream;
  

Это компилируется без ошибок, даже если это неверно, поскольку очевидно, что _stream не имеет типа StreamWithValue. Есть ли способ для более строгой проверки типов? Я использую Dart 2.1.2, Android Studio 3.3.2. Как ни странно, компилятор правильно находит здесь ошибку:

   StreamWithValue get stream2 => _stream;
  

Ответ №1:

По умолчанию Dart 2 допускает неявные понижения для производных типов. Чтобы запретить их, в вашем analysis_options.yaml файле (создавая его при необходимости) установите:

 analyzer:
  strong-mode:
    implicit-casts: false
  

Это приведет к возникновению ошибки анализа:

Возвращаемый тип ‘Stream’ не является ‘StreamWithValue’, как определено методом ‘stream’.

Вас также может заинтересовать настройка:

 analyzer:
  strong-mode:
    implicit-dynamic: false
  

Для получения дополнительной информации см.https://www.dartlang.org/guides/language/analysis-options .