我正在尝试传递类型以利用类型信息,但是该类型似乎并没有通过。
我回到文档中仔细检查了Dart泛型实际上是否已被纠正,根据文档,它们是:
我在响应中称水合物,它使响应对象的内容变形:
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
答案 0 :(得分:2)
正如GüntherZöchbauer所说,type参数在Dart 1.24中不起作用。
以下内容解释了如果您在Dart 2.0中尝试相同的代码会发生什么情况,因为它使用了不正确的type参数,因此它也不起作用。
代码T.runtimeType
将T
视为表达式。当将包含类型参数的类型用作表达式时,它将求值为类Type
的实例。您打印的是该Type
对象的运行时类型(其中_Type
是Type
的内部平台实现)。
要打印实型,只需print(T)
(仍将T
转换为Type
对象,但是一个表示类型BoqVO
且带有toString
的对象BoqVO
名称。
与T is BoqVO
类似,您将T
评估为Type
对象,并且由于Type
没有实现BoqVO
,因此该测试始终为假。没有简单的方法可以测试类型参数的类型是否实现了其他特定类型,但是您可以像<T>[] is List<BoqVO>
一样对其进行修改。
答案 1 :(得分:1)
泛型集合从一开始就受到支持,并且得到了一些类型支持,但是泛型方法仅在Dart 1中处于试验阶段,而修饰的类型参数仅在Dart 2预发行版中添加。