Динамическое преобразование типов с зеркалами

Проблема:

Можно ли привести тип динамически к типу?

Например, возможно ли это с помощью зеркал:

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

var converted = testVal as reflectee.runtimeType;

Контекст: я хочу сделать класс Mixin, который определяет validate метод:

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 ответ

Решение

Вы могли бы использовать

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)));    
}
Другие вопросы по тегам