【问题标题】:Haxe: how to declare "static" methods in an Interface?Haxe:如何在接口中声明“静态”方法?
【发布时间】:2015-04-29 16:49:27
【问题描述】:

在 babble 上的旧 Haxe 论坛中已经提出(并且可能已经回答)了这个问题......但似乎那个 整个 论坛系统不再起作用。因此,我在这里问:

在 Haxe 中,我需要为包含静态函数“instance()”的类声明一个“接口”。但是当我这样做时:

You can't declare static fields in interfaces

所以我从public function instance() [...] 中删除了“静态”这个词,我得到了这个:

Field instance needed by [...] is missing.

显然是“第 22 条军规”。但显然必须有一些简单的解决方案。这是什么?

【问题讨论】:

    标签: interface static haxe


    【解决方案1】:

    正如您所说,该语言不允许接口上的静态字段。选择是故意的。另一件不存在的事情是继承静态字段。

    有几种方法可以构造您的代码以避免这样的用法,在我看来它不会给您带来很多好处。工厂模式或 DI 方法(我建议 minject library)似乎是最明显的。

    鉴于下面的评论,请使用 typedef 而不是接口:

    typedef GetInstance = Void -> Void;
    

    您可以将 typedef 作为接口传递,其优点是可以同时使用静态方法和实例方法来满足该签名。

    【讨论】:

    • 用例只是这个类有一个“公共静态函数实例()”,它返回一个单例实例。该应用程序包含几个库,它们需要相互引用为“extern”,这意味着它们需要了解包含此函数的接口。换句话说,他们需要能够调用这个函数等等。请具体回答...
    • 为什么要访问接口的静态字段?假设你有一个 ISingleton 接口,那么做 ISingleton.instance 有什么意义?你会在那里期待什么?静态字段应直接调用或引用。我也认为最好避免单身。你可以在网上找到很多关于这个话题的缺点。
    【解决方案2】:

    查看Singleton 库。任何实现 Singleton 的类都会自动声明一个静态“实例”变量和相应的 getter 函数。

    注意:在撰写本文时,Haxelib 版本 (1.0.0) 已过时。请下载 Git 版本。

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 2018-07-10
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      相关资源
      最近更新 更多