dart中通过反射获取私有变量

2023-12-28

我想在 dart 的对象中获取私有变量。

这个变量没有吸气剂,所以我想通过反射来做到这一点。

我尝试了很多方法,但对我来说没有任何作用。

例如,当我这样做时:

var reflection = reflect(this);
InstanceMirror field = reflection.getField(new Symbol(fieldName));

我收到错误:

fieldName 没有 getter。 这是正常的,因为变量没有 getter。

我怎样才能得到这个变量?

使用测试代码编辑:

这是我的反射测试(测试变量是 ReflectClass(MyClass))

reflectClass(Injector).declarations.keys.forEach((e) => test.getField(e, test.type.owner))

我收到此错误:

类“_LocalInstanceMirror”没有实例方法“getField” 匹配参数。

如果我这样做:

reflectClass(Injector).declarations.keys.forEach((e) => test.getField(e))

I get:

类“DynamicInjector”没有实例 getter '_PRIMITIVE_TYPES@0x1b5a3f8d'。

声明的值也是如此。


您收到的错误消息实际上是正确的。该类有一个针对该字段的 getter。 Dart 隐式地​​为所有字段创建 getter 并为所有非最终/非常量字段创建 setter。

Dart2JS 似乎尚不支持访问私有成员。 看https://code.google.com/p/dart/issues/detail?id=13881 https://code.google.com/p/dart/issues/detail?id=13881

下面是如何访问私有字段的示例: (示例来自https://code.google.com/p/dart/issues/detail?id=16773 https://code.google.com/p/dart/issues/detail?id=16773)

import 'dart:mirrors';

class ClassWithPrivateField {

  String _privateField;
}

void main() {

  ClassMirror classM = reflectClass(ClassWithPrivateField);
  Symbol privateFieldSymbol;
  Symbol constructorSymbol;
  for (DeclarationMirror declaration in classM.declarations.values) {
    if (declaration is VariableMirror) {
      privateFieldSymbol = declaration.simpleName;
    } else if (declaration is MethodMirror && declaration.isConstructor) {
      constructorSymbol = declaration.constructorName;
    }
  }

  // it is not necessary to create the instance using reflection to be able to
  // access its members with reflection
  InstanceMirror instance = classM.newInstance(constructorSymbol, []);

  // var s = new Symbol('_privateField'); // doesn't work for private fields

  // to create a symbol for a private field you need the library 
  // if the class is in the main library
  // var s = MirrorSystem.getSymbol('_privateField', currentMirrorSystem().isolate.rootLibrary);
  // or simpler
  // var s = MirrorSystem.getSymbol('_privateField', instance.type.owner); 
  for (var i=0; i<1000; ++i) {
    instance.setField(privateFieldSymbol, 'test');
    print('Iteration ${instance.getField(privateFieldSymbol)}');
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dart中通过反射获取私有变量 的相关文章

随机推荐

  • Hibernate中嵌入成员的成员的独特约束

    是否可以在 Hibernate 中的嵌入式类的成员上定义唯一的约束 我需要确保 Nested i1 和 Nested i2 作为一对 组合 是唯一的 Entity Table uniqueConstrains public class Wi
  • 读取 R 中不同目录中最后创建/修改的文件

    我想读取最近在不同目录中修改 或创建 的 CSV 文件 然后将其放入预先存在的单个数据帧 df 总计 中 我有两种目录可供阅读 A LogIIS FOLDER01 files csv 在其他设备上有一个包含多个files csv的文件夹 如
  • Markdown:如何显示预览(比如前N个单词)

    我正在使用 Rails 4 和 Kramdown 但我相信这个问题可以扩展到任何支持 Markdown 的 网络 编程语言 我正在制作一个博客网站 在概述页面上 我想显示每篇文章的开头 由于文章可能很长 我只想展示第一部分 一个简单的想法是
  • 数据模板和泛型类型

    我有一个通用类 public abstract class BaseViewModel
  • Doobie 无法找到或构造类型 T 的 Read 实例

    我正在使用 doobie 查询一些数据 一切正常 如下所示 case class Usuario var documento String var nombre String var contrasena String def getUsu
  • gdb 按行号反汇编

    假设我想反汇编文件 x 的 m n 行 其中文件 x 不在当前上下文中 这个手术是否可行 如果可以 如何进行 注意 我正在 x86 Linux 上工作 您可以使用反汇编命令 m键在其汇编对应行前面显示原始 C 行 disassemble m
  • 如何找到 php 数组中最后一次出现的“needle”

    有一个内置函数用于查找值的数组键 array search http www php net array search 然而 正如您从示例中看到的 该函数仅找到第一个出现的位置 而我需要最后一个出现的位置 有没有内置函数为了这 如果没有的话
  • Mass DM 机器人工作正常,但现在无法发送消息

    几个月前 我和一个叫 Diggy 来自这个社区 的人为我和一些朋友在 BlackDesert Online 上运行的公会编写了一个 MassDM 机器人 一直工作得很好 直到 10 月 28 日停止发送 DM 一开始 它只是将 DM 发送给
  • 使用java将大量数据从数据库导出到.csv时出现问题

    我 谢谢你的关注 我想使用 java 将大量数据 实际上是 600 万行 导出到 csv 文件 该应用程序是一个 swing 应用程序 带有 JPA 使用 toplink ojdbc14 我尝试过使用 缓冲写入器 随机存取文件 文件通道 等
  • pandas - 将函数应用于所有其他行的当前行

    我正在利用 pandas 创建一个数据框 如下所示 ratings pandas DataFrame article a 1 1 0 0 article b 1 0 0 0 article c 1 0 0 0 article d 0 0 0
  • Django - 测试失败时记录

    我有很多单元测试Django https www djangoproject com 如果测试失败 我经常需要查看日志 如果可能的话 在控制台中 我无法真正使用日志文件 因为它变得非常混乱 我现在要做的是 激活控制台日志记录settings
  • 删除字符串末尾的空格但保留换行符

    如何检查Python字符串在任何点是否有新行前有一个空格 如果确实如此 我必须删除该单个空格 但保留新行符号 这可能吗 def remspace my str if len my str lt 2 returns unchanged ret
  • 打开模式时自动聚焦输入不起作用 - React Bootstrap

    我有一个由 3 个组件组成的模态 每个组件代表一个阶段 例如第一个组件正在输入用户的名字 当用户单击 下一步 时 它将转到下一个组件 即输入地址 然后用户单击 下一步 它将带用户到最后阶段 输入昵称 在每一个input来自组件的元素 它将有
  • 如何从内联汇编器调用 Win32 API 函数?

    有人可以告诉我这段代码有什么问题吗 我只是从 kernel32 dll 调用 Sleep 函数 怎么了 我使用的是 Visual Studio 2008 任何帮助将不胜感激 非常感谢 asm mov eax 77e2ef66h push 9
  • 如何附加(或其他方法)大量 HTML 代码?

    我需要附加很多 HTML 代码 为了提高可读性 我不想将所有内容写在一行中 而是将它们拆分为常规 HTML 这大概是 15 个新行之类的 问题是 JavaScript 不允许我这样做 var target post comment this
  • 如何从张量流中的RNN模型中提取细胞状态和隐藏状态?

    我是 TensorFlow 新手 很难理解 RNN 模块 我正在尝试从 LSTM 中提取隐藏 单元状态 对于我的代码 我使用的实现https github com aymericdamien TensorFlow Examples http
  • Python 3:如何将异步函数提交到线程池?

    我想同时使用ThreadPoolExecutor from concurrent futures和异步函数 我的程序重复向线程池提交具有不同输入值的函数 在该较大函数中执行的最终任务序列可以按任何顺序 并且我不关心返回值 只关心它们在将来的
  • 跨平台配置、选项、设置、首选项、默认值

    我对人们关于如何最好地在跨平台应用程序中存储首选项和默认设置的看法感兴趣 我主要在 nix 和 Windows 上使用 Node js 和 Perl 但我也对更大的前景感兴趣 在 nix 世界中 点文件 和目录 非常常见 系统范围或应用程序
  • 尝试安装 eclipse 时 eclipse 更新失败

    当尝试使用 eclipse 新软件功能安装 eclipse 时 出现以下错误 Cannot complete the install because one or more required items could not be found
  • dart中通过反射获取私有变量

    我想在 dart 的对象中获取私有变量 这个变量没有吸气剂 所以我想通过反射来做到这一点 我尝试了很多方法 但对我来说没有任何作用 例如 当我这样做时 var reflection reflect this InstanceMirror f