У меня вопрос по поводу дженериков в дротике. У меня есть следующий код дротика с параметром универсального типа, который расширяет число. В моем классе я хочу теперь определить переменную типа T со значением ноль. Это кажется невозможным. Может ли кто-нибудь объяснить мне, почему это так?
class A<T extends num> {
T t = 0; // error: A value of type 'int' can't be assigned to a variable of type 'T'.
num n = 0; // works
}
Проблема, с которой я столкнулся, заключается в том, что я хочу создать список в своем классе, инициализированный нулями. Итак, я могу:
A() {
var list = List<T>.filled(10, 0 as T)
}
который работает для A<int>()
, но не работает для A<double>()
с сообщением об ошибке
тип int не является подтипом типа double в приведении типа
Что сбивает с толку, потому что, начиная с Dart 2.1, можно передать int в двойную переменную, например:
double x = 0;
Итак, как я могу это решить? Единственная возможность действительно проверить тип в моем конструкторе и сгенерировать список с 0 или 0,0 в зависимости от типа T?
0 as double
не будет работать для виртуальной машины Dart, потому чтоint
не может быть преобразован вdouble
.double x = 0;
не требует приведения типов; язык рассматривает его как синтаксический сахар дляdouble x = 0.0;
, поэтому он работает только для целочисленных литералов. Думаю, вам нужно будет явно проверитьT
. - person jamesdlin   schedule 25.11.2020