带镜子的动态类型转换

时间:2014-04-03 16:04:40

标签: dart dart-mirrors

问题:

是否可以动态转换为类型?

例如,使用镜子可以做到这一点:

var reflectee = im.getField(simpleName).reflectee;

var converted = testVal as reflectee.runtimeType;

上下文: 我想创建一个定义validate方法的Mixin类:

abstract class Validatable {
  bool validate(Map document) {
  }
}

它将迭代为混合的类定义的变量,并检查文档中的变量是否属于同一类型。

现在,它正在处理获取相应变量的runtimeType,但它是非常严格的,因为它没有强制转换。例如:

var a = 1.1;
var b = 1;
print(a.runtimeType == b.runtimeType); // false

最好更好地与as核对,但我不知道如何让它发挥作用。 becase的:

a = b;
print(a.runtimeType); // int

而不是双倍,正如人们所预料的那样。

有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以使用

import 'dart:mirrors';

class A {

}

class B extends A {

}

class C extends A {

}

void main(args) {
  var a = 1.1;
  var b = 1;
  var x = reflect(b);
  print(x.type.isSubtypeOf(reflectType(num)));
  print(x.type.isAssignableTo(reflectType(num)));
  print(x.type.isAssignableTo(reflectType(double)));

  var myb = new B();

  print(reflect(myb).type.isSubtypeOf(reflectType(A)));
  print(reflect(myb).type.isAssignableTo(reflectType(A)));
  print(reflect(myb).type.isAssignableTo(reflectType(C)));    
}