gpt4 book ai didi

haxe - 如何仅从 Haxe 中的另一个类中实例化类

转载 作者:行者123 更新时间:2023-12-01 01:15:28 27 4
gpt4 key购买 nike

我需要防止类 A 在任何地方被实例化,而只能从另一个类 B 实例化,然后类 B 可以返回类 A 的创建实例,该实例可以在任何其他类中使用。

我知道 B 在这个例子中可能是一个工厂,我查看了 Haxe 代码说明书中的工厂模式,但它似乎不适合我正在寻找的东西。

在我的示例中,类 B 正在做一些工作,然后应该在类 A 的实例中返回结果。

没有人能够创建类 A 的实例,因为它是类 B 执行工作的结果。任何需要 A 实例的人都应该让 B 完成工作并返回结果 A 实例

希望我解释清楚

最佳答案

您通常会使用 @:allow() metadata 来完成此操作结合私有(private)构造函数:

A.hx:

class A {
@:allow(B)
private function new() {}
}

B.hx:

class B {
public static function create():A {
return new A(); // compiles
}
}

尝试在 B 之外实例化 A 将导致编译器错误:

class Main {
static function main() {
new A(); // Cannot access private constructor of A
}
}

请注意,仍然可以通过使用 @:access()@:privateAccess 元数据来解决此问题 - 在 Haxe 中,没有什么是真正 私有(private)的。它遵循“程序员最了解”的理念,这可能非常强大。

此外,您可能希望将 A 声明为 @:final,这样就无法对其进行子类化,因为子类可以访问 Haxe 中的私有(private)字段。但同样,这可以用 @:hack 元数据覆盖。

关于haxe - 如何仅从 Haxe 中的另一个类中实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56289525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com