在 DART 中创建泛型类型的实例

2024-01-01

我想知道是否可以在 Dart 中创建泛型类型的实例。在 Java 等其他语言中,您可以使用反射来解决这个问题,但我不确定这在 Dart 中是否可行。

我有这门课:

class GenericController <T extends RequestHandler> {

    void processRequest() {
        T t = new T();  // ERROR
    }
}

我尝试了使用 Activator 的 mezonis 方法,它有效。但这是一种昂贵的方法,因为它使用镜像,如果您不想拥有 2-4MB 的 js 文件,则需要使用“mirrorsUsed”。

今天早上我想到使用通用 typedef 作为生成器,从而摆脱反射:

您定义这样的方法类型:(如果需要,添加参数)

typedef S ItemCreator<S>();

甚至更好:

typedef ItemCreator<S> = S Function();

然后在需要创建新实例的类中:

class PagedListData<T>{
  ...
  ItemCreator<T> creator;
  PagedListData(ItemCreator<T> this.creator) {

  }

  void performMagic() {
      T item = creator();
      ... 
  }
}

然后你可以实例化PagedList像这样:

PagedListData<UserListItem> users 
         = new PagedListData<UserListItem>(()=> new UserListItem());

您不会失去使用泛型的优势,因为在声明时您无论如何都需要提供目标类,因此定义创建者方法不会有什么坏处。

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

在 DART 中创建泛型类型的实例 的相关文章

随机推荐

  • 为什么运行 Rspec 时会出现未定义方法“有”错误?

    我最近升级到 Rails 4 除了 Rspec 测试之外 一切正常 require spec helper describe Invoice do before each do user FactoryGirl create activat
  • Laravel 查询生成器 - sum() 方法问题

    我是 Laravel 的新手 查询生成器有一些问题 我想构建的查询是这样的 SELECT SUM transactions amount FROM transactions JOIN categories ON transactions c
  • 如何在 remix run 中从实用程序函数重定向

    我正在使用 Remix run 我想从 auth 实用程序函数重定向到我的登录页面 但它不起作用 这是与我的身份验证实用程序方法类似的功能 import redirect from remix async function authenti
  • 在 for 循环中使用“else”的 Pythonic 方法[重复]

    这个问题在这里已经有答案了 我几乎没有注意到Python程序在for循环中使用了else 我最近使用它在退出时根据循环变量条件执行操作 因为它在范围内 在 for 循环中使用 else 的 Python 方式是什么 有什么值得注意的用例吗
  • Jquery找到所有以字符串开头的id?

    只是想知道如何在整个页面中搜索以 content 开头的所有 id 以及如何仅在名为 extra content 的命名 div 中找到它们 一旦我有了所有的ID 我想隐藏它们 下面是我想找到的示例 div div lt Find div
  • 使用 Maven 的 JavaScript 缩小工作流程

    我想知道是否有任何 最佳实践 可以将 现代 JavaScript 构建工作流程 集成到生成 WAR 工件的 Maven 构建中 我发现了几个处理串联和缩小的 Maven 插件 WRO4J https code google com p wr
  • 如何开始 VOIP 编程? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何开始开发 VoIP 产品 想听听
  • 抛出异常时不调用析构函数

    考虑以下代码 include
  • MongoDB 和 C#:不区分大小写的搜索

    我在用MongoDB http www mongodb org 和MongoDB 的 C 驱动程序 http www mongodb org display DOCS CSharp Language Center CSharpLanguag
  • Android GUI架构-Surface/view/window/canvas之间的关系

    更新 经过几天的谷歌搜索和实验 https github com pierrchen understandAndroidUI 我已经找到了大部分愚蠢问题的答案 查看我提交的答案 Android Window 的职责是什么 这里有一些问题 它
  • 给定替换 S 和列表 X,如何将 S 应用于 X

    假设我有一个替代品S并列出Xs 其中每个变量出现在Xs也发生在S 我如何找到该列表S Xs 即通过应用替换获得的列表S到列表Xs 更具体地说 我有一组谓词和 DCG 规则 看起来像 pat P gt seg P seg seg X Y Z
  • Android - 构建通知,TaskStackBuilder.addParentStack 不起作用

    我正在尝试从 Android 文档解释的通知启动活动 但是当我打开通知然后按后退按钮时 HomeActivity 父级 不会打开 而是应用程序关闭 我究竟做错了什么 Intent resultIntent new Intent contex
  • 以同样的方式处理由空格分隔的单词

    我试图找到同时出现在多个文档中的单词 让我们举个例子 doc1 this is a document about milkyway doc2 milky way is huge 正如您在上面两个文档中看到的 单词 milkyway 在两个文
  • 为什么 C 中的 struct 关键字必须位于结构实例之前?

    假设我在 C 中定义了一个结构体 如果我声明该结构体的一个实例 则必须在其前面包含 struct 关键字 Define struct struct Book char title 50 char author 50 char subject
  • iphone:使视图透明但子视图不透明

    我有一个名为 A 的自定义 UIViewController 我想将其视图添加到另一个控制器 名为 B 视图作为子视图 A 的视图包含两个按钮作为子视图 我想让 A 的视图透明 但其中的按钮不透明 我想知道有什么办法可以做到吗 据我观察 如
  • gcc、严格别名和通过联合进行转换

    你有什么恐怖故事要讲吗 GCC 手册最近添加了有关 fstrict aliasing 和通过联合强制转换指针的警告 获取地址 转换结果指针并取消引用结果未定义的行为 强调 即使强制转换使用联合类型 例如 union a union int
  • Facebook Messenger 机器人应用程序 - 持久菜单未出现

    我正在构建一个 Facebook 聊天机器人应用程序 我已经使用 HTTP POST 和有效的页面访问令牌通过一些 JSON 设置了持久菜单 为了检查我的设置是否正确 我发出了 GET 请求https graph facebook com
  • 在设计模式下锁定 .NET 自定义控件中的高度调整大小

    我正在开发一个 C NET 自定义控件 我想防止用户在设计模式下调整高度大小 同时允许他们调整宽度 我知道这个问题有点老了 但以防万一有人寻找这个我会尝试回答它 你必须覆盖设置边界核心 http msdn microsoft com en
  • 使用 django 动态生成 PDF 并通过电子邮件发送

    我有一个 django 应用程序 可以根据 HTML 表单上的用户输入动态生成 PDF 使用 reportlab pypdf 并返回带有以下内容的 HTTP 响应 application pdfMIME 类型 我想选择执行上述操作或通过电子
  • 在 DART 中创建泛型类型的实例

    我想知道是否可以在 Dart 中创建泛型类型的实例 在 Java 等其他语言中 您可以使用反射来解决这个问题 但我不确定这在 Dart 中是否可行 我有这门课 class GenericController