dart - Dart 反射(reflect)问题。 getField

标签 dart dart-mirrors

我正在尝试使用镜像,但是在一些简单的代码中有错误。

import 'dart:mirrors';
// -----------------
class TestUser extends Object{
  String name = 'aaa';
  String status = 'bbb';
  String position = 'ccc';
  int age = 20;
}

var mapVal = new TestUser();
InstanceMirror mirror = reflect(mapVal);

var futureValue = mirror.getField('age');
futureValue.then((imValue) => print("Field: age = ${imValue.reflectee}"));

结果:
Unhandled exception:
Class 'String' has no instance getter '_name@0x1aab143'.

NoSuchMethodError : method not found: '_name@0x1aab143'
Receiver: "age"
Arguments: []
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:45)
#1      Symbol.getName (dart:_collection-dev/symbol.dart:64)
#2      _n (dart:mirrors-patch/mirrors_impl.dart:59)
#3      _LocalObjectMirror.getField (dart:mirrors-patch/mirrors_impl.dart:254)
#4      main (file:///C:/Users/Less/IdeaProjects/testDart/console/template.dart:67:36)
#5      _startIsolate.isolateStartHandler (dart:isolate-patch/isolate_patch.dart:216)
#6      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:115)

这是什么意思?我不知道。为什么要从字符串中获取“_name @ 0x1aab143”?黑魔法...

最佳答案

var mapVal = new TestUser();
InstanceMirror mirror = reflect(mapVal);
// getField() expects an instance of Symbol, not String
var futureValue = mirror.getField(new Symbol("age"));
// getField() returns an InstanceMirror, not a Future<InstanceMirror>
print("Field: age = ${futureValue.reflectee}");

可能是您更新了SDK,但未更新编辑器吗?使用当前SDK的当前编辑器将所有这些都显示为警告,从而使对该代码进行故障排除非常简单。

关于dart - Dart 反射(reflect)问题。 getField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21930464/

相关文章:

dart - @override Dart 代码

reflection - Dart ,如何获取特定成员(member)的符号?

xcode - pubspec.yaml 中的第 3 方 Dart 包导致在 Xcode 中找不到致命文件错误(但适用于 Android)

android - 具有捕捉效果的 Flutter 水平滚动 gridview

flutter - 如何通过 Flutter 中的 url 从网络图像中获取 Uint8List?

firebase - Firestore:在控制台中显示收集文档

flutter - 浏览 dart 中的嵌套字典

object - 如何将键值对添加到对象?

dart - 如何使用镜像获取声明类型?

dart - 如何调用类形式 dart 库字符串或文件