1

问题:

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

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

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,但我不知道如何让它工作。因为:

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

而不是像人们预期的那样加倍。

可能吗?

4

1 回答 1

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)));    
}
于 2014-04-03T16:20:52.620 回答