【问题标题】:I want to add my own methods to a few Dart Classes我想将自己的方法添加到一些 Dart 类中
【发布时间】:2012-10-07 03:53:25
【问题描述】:

我尝试简单地“扩展” Map 类失败了,因为 List 是一个接口,不能扩展,但必须实现。

目标只是在一些现有类之上添加一些方法,例如:

List.add_unique(item) 如果项目尚不存在,我只想追加。这可以通过使用 List.indexOf(item) != -1 (其中未找到 -1)与 append !=null 逻辑来很好地完成。这将是一个很好且易于理解的示例?

但是,如何以最短、总体开销最小的方式完成此任务?我想我可以用松散的打字方式 - 至少从一开始就是这样。

我还想添加或修改其他方法,例如 Map 类的 .add() 方法。

我已经很多年没有处理接口了,我想总体上来说可能有一种更简单的方法来开始我的项目的这一方面。

谢谢!

【问题讨论】:

标签: class extend dart implements


【解决方案1】:

我也遇到过这个问题。目前最好的解决方法是创建一个转发所有方法调用的类。就像是: https://github.com/dart-lang/html5lib/blob/master/lib/src/list_proxy.dart

然后您可以从 ListProxy 继承并覆盖或添加您需要的任何方法。

如果人们觉得这足够有用,也许我们可以把它放在它自己的 pub 包中。不过,我希望我们可以修复 dart:core,因此它支持从所有核心集合类继承。

顺便说一句,如果你想覆盖 Map 中的一个方法,它会容易得多:你可以import 'dart:coreimpl'; 并扩展HashMapImplementation

【讨论】:

  • 另外,随着显式接口的消失,List 将成为一个抽象类。
  • 我已经能够使用“辅助功能”做我需要的事情,它们不是很有野心,但确实在帮助我。我不会在 Ruby 中做任何事情,但 Dart 就是 Dart,并且一些专家鼓励走这条路。显然不是一回事。
猜你喜欢
  • 2015-03-07
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
相关资源
最近更新 更多