Dart 反映基本类型,例如;“双”字;导致意外输出

Dart 反映基本类型,例如;“双”字;导致意外输出,dart,Dart,以下示例在以下情况下失败: FAIL: MyClass tests getClassReturnsConstructorForDouble Expected: ?:<double> Actual: ?:<double> 无法准确反映int/double类型吗?我认为反射正在向您返回正确的类型,但您的测试失败,因为objectClass和object.runtimeType是两个独立的对象,因此彼此不相等。如果先将它们转换为字符串,它们将彼此相等: expec

以下示例在以下情况下失败:

FAIL: MyClass tests getClassReturnsConstructorForDouble
  Expected: ?:<double>
    Actual: ?:<double>

无法准确反映int/double类型吗?

我认为反射正在向您返回正确的类型,但您的测试失败,因为objectClass和object.runtimeType是两个独立的对象,因此彼此不相等。如果先将它们转换为字符串,它们将彼此相等:

expect(objectClass.toString(),等于(object.runtimeType.toString());

reflectedType获取真正的实现类型。runtimeType可以是设计的,也可以是设计的

对于各种类型的数字、字符串和其他内置类型的数字,可以有不同的实现,但它们都是公开的

例如,对于不同大小的整数,我们可能有不同的实现类型,但它们都会说它们的runtimeType是int。如果您仔细思考,您可以看到它们之间的差异


另一个例子可能是字符串。例如,纯ASCII字符串可能有专门的类,因为它们可以更紧凑地表示。这不会在基本级别公开:runtimeType是String。除非通过反射进行挖掘,否则无法检测到此问题。

这可能是一个bug,也可能是由于dart2js的兼容性造成的一个难看的缺点。我对这个错误发表了评论。关于这方面的更多讨论是否应该有一种“松散”比较reflectedType和runtimeType返回的类型的方法,而不是像上面的回答那样使用toString()?(松散地说,我的意思是,所有不同类型的double都等于其他类型的double,对于字符串等)看起来解决方案将是TypeMirror.isAssignableFrom(t)