ClassMirror.newInstance() 的“arguments”参数的格式是什么?

2024-01-02

我非常愿意尝试这个直到我做对为止,但希望有人能给我一个提示。该参数在文档 (gen-dartdocs/dart-mirrors/ClassMirror/newInstance.html) 中声明为

InstanceMirror newInstance(Symbol constructorName,
                      List positionalArguments,
                      [Map<Symbol,dynamic> namedArguments]);

文档中有关于positionalArguments 和namedArguments 格式的精彩文章。然而,这只是我目前的容忍水平的一个抽象方面。

一个不错的讨论也存在于http://japhr.blogspot.com/2014/06/dart-factory-method-pattern.html http://japhr.blogspot.com/2014/06/dart-factory-method-pattern.html但是,遗憾的是,没有实际将参数传递到方法中的示例。

就我而言,我想简单地将两个参数“标题”和“描述”传递到未命名的子类构造函数中。

到目前为止,这是我的代码:

文件:item.dart

import 'dart:mirrors';

abstract class Item {

    String title;
    String description;

    factory Item(String type) {
      MirrorSystem libs = currentMirrorSystem();
      LibraryMirror lib = libs.findLibrary(new Symbol('app.models'));
      Map<Symbol, Mirror> classes = lib.declarations;
      // To do: handle exception if class not found
      ClassMirror cls = classes[new Symbol(type)];
      // TODO:
      //  verify each subclass has no-arg ctor
      //  determ how to pass args to ctor.
      InstanceMirror inst = cls.newInstance(new Symbol(''), []);
      return inst.reflectee;
    }

    // conflicts w/ Item factory
//  Item(this.title, this.description);
}

这是实例化的类:

文件:模型.dart

library app.models;

import 'item.dart' show Item;

/// The barebones model for a codelab. Defines constants used for validation.
class Codelab implements Item {
   // ...
}

最后,这是 Item 工厂的调用方式。 ItemElement 是其自身层次结构的超类,是 CodelabElement 的子类:

文件:item_element.dart:

import 'item.dart' show Item;

class ItemElement {
    Item item;
    final String itemType;

    ItemElement() {
      item = new Item(itemType);
    }
    // ...
}

和 CodelabElement:

文件:codelab_element.dart

import 'model.dart' show Codelab;
import 'item_element.dart' show ItemElement;

class CodelabElement extends ItemElement {

    final itemType = "Codelab";

    CodelabElement() : super() {}

    //...
}

进而:

文件:main.dart

void main() {
    var element = new CodelabElement();
}

目前,新的 Codelab 实例是从 newInstance() 返回的(非常酷),但它不包含继承的“标题”和“描述”属性。

也许这与我对“extends”和“implements”的用法不清楚有关。


这应该有效

cls.newInstance(new Symbol(''), ['a', 1] /*, 
    {#arg1Name: 'arg1Value', #arg2Name: 'arg2Value'}*/ );

就像

new MyClass('a', 1, arg1Name: 'arg1Value' /*, arg2Name: 'arg2Value'*/); 

刚刚看到,命名参数没有实现。

你可以尝试一下DartPad https://dartpad.dartlang.org/71912e1a26d1e6bab886

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ClassMirror.newInstance() 的“arguments”参数的格式是什么? 的相关文章

随机推荐

  • C DLL 无法在 C# 中加载

    我有一个简单的 C DLL 不是 COM 我还有一个运行它的 C 2 0 应用程序 dllimport 该dll被放置在应用程序的exe中 我知道该 dll 没问题 而且我的应用程序调用它成功读取了它 但是当我将它们移动到另一台计算机时 它
  • 强制显式删除 Java 对象

    我正在开发一个处理大量非常密集流量的 Java 服务器 服务器接受来自客户端的数据包 通常为数兆字节 并将它们转发给其他客户端 服务器从不显式存储任何传入 传出数据包 然而服务器不断遇到OutOfMemoryException例外情况 I
  • 操作完成工作后执行函数

    大家好 今天开始使用 Redux 因此正在构建一个非常基本的项目 通过单击 递增 递减 按钮来递增 递减数字 这是一个小代码 请看一下 操作 创建文件 export const increment num gt return type in
  • fullcalendar:如何添加每天所有事件的总持续时间

    我注意到这个问题被问了几次 但没有实际的正确答案或良好的反馈来引导正确的道路 我在用全日历 https fullcalendar io javascript 插件并尝试添加每天多个事件的总小时数 然后我将在每天的页眉或页脚中显示总和 我尝试
  • 如何从react-native-fbsdk获取用户信息(电子邮件、姓名等)?

    当用户通过 Facebook 进行身份验证时 我尝试访问用户的电子邮件和姓名以进行设置和帐户 我已经准备好了react native fbsdk的文档 但我没有在任何地方看到它 接受的答案使用fetch但是 SDK 也能够执行此请求 因此
  • 您没有权限访问该页面,请咨​​询您的系统管理员

    我是管理员 并且我已经安装了来自以下位置的 News Letter 扩展 当我尝试使用它时 它返回以下错误 错误 您没有权限访问此页面 请咨 询您的系统管理员 登录管理员 进入System gt User Group 编辑您的管理员用户组
  • OpenCV 向量到 Mat 但不是 element->row

    有一种非常简单的方法可以从向量构造 Mat 只需执行以下操作 vector
  • 单独向 firestore 文档添加字段

    以下代码创建一个 firestore 集合并向其中添加数据 function saveID sender psid complete let data new Object data ID sender psid data TASK com
  • 如何从字符串中提取主题标签?

    我需要从接收字符串的函数中提取 这是我所做的 def hashtag str lst for i in str split if i 0 lst append i 1 return lst 我的代码确实有效 但它会分割单词 因此对于示例字符
  • Linq 到 Xml 到 Datagridview

    好吧 这里开始发疯了 我有以下代码 var query from c in db Descendants Customer select c Elements dgvEditCusts DataSource query ToList 在此
  • “file_exists”问题中的特殊字符(php)

    我使用特殊字符 瑞典字母 现在 我有一些文件夹 其中包含分类图像 文件夹按类别命名 for i 1 i lt 5 i if file exists big images i jpg echo Inne unlink big images i
  • vcruntime140_app.dll 未包含在 Microsoft Visual C++ 2017 Redistributable (x64) 中?

    我用QT开发了一个GUI 我的发行版本需要vcruntime140 app dll才能运行 我在 SysWOW64 文件夹中找不到此 dll 因此我重新安装了 Microsoft Visual Stuio C 2017 Redistribu
  • 消息中至少有一个安全令牌无法验证

    服务器配置
  • 使用 Assembly.GetCallingAssembly() 不会返回调用程序集

    在我的 ASP NET MVC 应用程序中 我使用一个小助手来迭代所有控制器 该助手位于与我的 MVC 应用程序不同的程序集中 我正在引用它 问题是 当在助手中调用 Assembly GetCallingAssembly 方法时 它不会返回
  • 强制清理会话cookie(firefox、chrome)

    某些浏览器 Firefox Chrome 在设计上不会在您关闭会话 cookie 时清除会话 cookie 如果您设置了某种记住我的开关 例如在 FF 中 转到 选项 gt 常规 gt Firefox 启动时 gt 显示我的窗口 和上次的选
  • 如何防止移动端视图加载到webview中

    正在设计一个带有 webview 的 android 应用程序 但总是在网站的移动视图加载时 但我想加载桌面版本 您可以尝试以下操作 WebView getSettings setUserAgentString Mozilla 5 0 Wi
  • Python修改错误列表?

    我正在尝试使用以下命令生成素数列表this http en wikipedia org wiki Sieve of Eratosthenes方法 我需要循环遍历每个数字 2 n 并检查它是否是 2 n 的倍数 由于某种原因 错误的列表似乎被
  • 下面的代码是否捕获了 TPL 中原始任务、延续任务和子任务的异常?

    我正在使用 TPL 和 async await 在 Webclient 之上为我的应用程序构建异步 API 很少有地方 通常是我需要运行一堆异步任务并最终等待所有任务的地方 遵循代码片段 我只是想确保我得到它的正确性 即使使用 TPL 和
  • 通过标头嵌入无法优化掉的字符串

    在开发仅包含标头的库时 我想确保给定的字符串嵌入到使用我的标头的所有二进制文件中 即使编译器配置为优化未使用的常量 并且二进制文件会被删除 嵌入不应该有任何副作用 除了使生成的二进制文件更大一点 我不知道人们将如何使用标题 但是 标头可能包
  • ClassMirror.newInstance() 的“arguments”参数的格式是什么?

    我非常愿意尝试这个直到我做对为止 但希望有人能给我一个提示 该参数在文档 gen dartdocs dart mirrors ClassMirror newInstance html 中声明为 InstanceMirror newInsta