Dart泛型未按照文档进行分类

时间:2018-09-19 14:14:33

标签: dart

我正在尝试传递类型以利用类型信息,但是该类型似乎并没有通过。

我回到文档中仔细检查了Dart泛型实际上是否已被纠正,根据文档,它们是:

enter image description here

我在响应中称水合物,它使响应对象的内容变形:

T

我希望BoqVO的类型为class Response { ... void hydrate<T>() { print(T.runtimeType); // always prints _Type if (T is BoqVO) { print("IF"); } else { print("ELSE"); // always goes into ELSE block } } ... }

response.hydrate<BoqVO>();

...但是不是。

response.hydrate(new BoqVO());替换为void hydrate(T t) { ,并将方法签名更改为

t

如果我现在使用小写的2,则可以工作,但不必实例化该对象即可使用经过修饰的泛型。

有什么想法为什么Dart会这样做,或者我想让泛型仿制药无法正常工作?

PS:我尚未使用Dart 1.24.3,目前不在Dart Flux

2 个答案:

答案 0 :(得分:2)

正如GüntherZöchbauer所说,type参数在Dart 1.24中不起作用。

以下内容解释了如果您在Dart 2.0中尝试相同的代码会发生什么情况,因为它使用了不正确的type参数,因此它也不起作用。

代码T.runtimeTypeT视为表达式。当将包含类型参数的类型用作表达式时,它将求值为类Type的实例。您打印的是该Type对象的运行时类型(其中_TypeType的内部平台实现)。 要打印实型,只需print(T)(仍将T转换为Type对象,但是一个表示类型BoqVO且带有toString的对象BoqVO名称。

T is BoqVO类似,您将T评估为Type对象,并且由于Type没有实现BoqVO,因此该测试始终为假。没有简单的方法可以测试类型参数的类型是否实现了其他特定类型,但是您可以像<T>[] is List<BoqVO>一样对其进行修改。

答案 1 :(得分:1)

泛型集合从一开始就受到支持,并且得到了一些类型支持,但是泛型方法仅在Dart 1中处于试验阶段,而修饰的类型参数仅在Dart 2预发行版中添加。