Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 使用镜像的动态类型转换_Dart_Dart Mirrors - Fatal编程技术网

Dart 使用镜像的动态类型转换

Dart 使用镜像的动态类型转换,dart,dart-mirrors,Dart,Dart Mirrors,问题: 是否可以动态强制转换为类型 例如,使用镜像是否可能: var reflectee=im.getField(simpleName.reflectee); var converted=testVal作为reflectee.runtimeType; 背景: 我想创建一个Mixin类,它定义了一个validate方法: 可验证的抽象类{ bool验证(地图文档){ } } 它将迭代为混合在其中的类定义的变量,并检查文档中的变量是否属于同一类型 现在,它正在处理获取相应变量的runtimeTy

问题:

是否可以动态强制转换为类型

例如,使用镜像是否可能:

var reflectee=im.getField(simpleName.reflectee);
var converted=testVal作为reflectee.runtimeType;
背景: 我想创建一个Mixin类,它定义了一个
validate
方法:

可验证的抽象类{
bool验证(地图文档){
}
}
它将迭代为混合在其中的类定义的变量,并检查文档中的变量是否属于同一类型

现在,它正在处理获取相应变量的
runtimeType
,但由于它不强制转换,因此限制性很大。例如:

var a=1.1;
var b=1;
打印(a.runtimeType==b.runtimeType);//假的
最好像那样检查
,但我看不出如何让它起作用。因为:

a=b;
打印(a.runtimeType);//int
而不是像人们所期望的那样加倍

可能吗?

您可以使用

导入“dart:mirrors”;
甲级{
}
B类扩展了A类{
}
C类扩展了{
}
空干管(args){
var a=1.1;
var b=1;
var x=反映(b);
打印(x.type.isSubtypeOf(reflectType(num));
打印(x.type.isAssignableTo(reflectType(num));
打印(x.type.isassignato(反射型(双));
var myb=新的B();
打印(reflect(myb).type.isSubtypeOf(reflectType(A));
打印(reflect(myb).type.isAssignableTo(reflectType(A));
打印(reflect(myb).type.isAssignableTo(reflectType(C));
}

我认为
isSubtypeOf
isAssignableTo
是相当新的。我只是想知道如何执行
实现
。因为严格来说,我们不是在讨论子类型。我已经尝试过:
B实现D
makes
myb
子类型并可分配给
D
。如果它实现了一个接口,那么它可以是该类型的
。我想
isSubtypeOf
包括
。我运行的是SDK的1.1.3,我看到1.2已经过时了,所以添加了新的功能。我用新的函数调用检查了一些,将
Map
observateMap
作为类型,其中
observateMap
实现
Map
。根据文档,正如您所说,
isSubclass
测试一个
is
是正确的。然而,没有一种方法提到它们将
测试为
,也没有
可观察映射将
报告映射为true。也许1.3会带来一些亮点?