Haxe:如何在接口中声明“静态”方法?

3
这个问题在旧的Haxe论坛babble上已经被问过(并可能已经得到回答)......但似乎整个论坛系统都不再工作了。因此,我在这里提问:
在Haxe中,我需要声明一个“接口”到一个包括静态函数“instance()”的类中。但是当我这样做时: You can't declare static fields in interfaces 所以我从public function instance() [...]中删除了单词“static”,然后我得到了这个: Field instance needed by [...] is missing. 显然是个“Catch-22”。但显然必须有一些简单的解决方案。它是什么?
2个回答

6
正如您所说,语言不允许在接口上使用静态字段,这个选择是有意为之的。另一个不存在的东西是继承静态字段。
有几种方法可以组织您的代码以避免使用这种用法,在我看来,它并没有给您带来太多优势。工厂模式或DI方法(我建议使用minject库)似乎是最明显的。
考虑下面的评论,使用typedef而不是接口:
typedef GetInstance = Void -> Void;

你可以像接口一样传递typedef,它的优点是你可以使用静态和实例方法来满足该签名。

这个使用案例很简单,这个类有一个“public static function instance()”,它返回一个单例实例。应用程序包含几个需要相互引用为“extern”的库,这意味着它们需要知道包括此函数的接口。换句话说,它们需要能够调用此函数以及其他函数。请在您的答案中具体说明... - Mike Robinson
为什么要访问接口的静态字段?假设你有一个ISingleton接口,那么使用ISingleton.instance有什么意义?你期望在那里找到什么?静态字段应该直接调用或引用。我认为最好避免使用单例模式。网络上有很多关于这个主题的缺点。 - Mark Knol

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接