gpt4 book ai didi

java - 通过构造函数传递实例或使用静态访问它?

转载 作者:搜寻专家 更新时间:2023-11-01 02:58:23 25 4
gpt4 key购买 nike

最近,我一直在使用 Bukkit API 进行编码,但是我的问题与它没有直接关系。

在 Bukkit API 中,可以有一个主类的单个实例(new MainClass() 会抛出错误),所以我想知道,我传递主类是否更好我所有的类都使用构造函数,或者我应该只使用返回实例的静态方法 (MainClass.getInstance())

我很好奇哪一个更好(在性能和实践方面)。

最佳答案

就实践而言,更好的方法是您的第一个建议:

Pass the main class to all of my classes using a constructor

这叫做 dependency injection , 并且是 preferred alternative over global access .

它不鼓励过度曝光(鼓励 encapsulation ,这很好),并通过允许 natural mocking 使测试更容易(反对使用像 PowerMock 这样的框架)。建议您尽可能使用此方法。


关于你的第二个建议:

Should I just use a static method that returns the instance

这种方法往往不受欢迎,特别是如果 Main 是可变的。

如果您公开一个全局可变实例,您将引入全局状态,即 tends to be a pain .

任何依赖它的模块最终都可能耦合到依赖它的其他模块。这称为 common coupling ,并且应该尽可能避免,因为它是最紧密的耦合形式之一。

全局访问使访问更容易,但代价是可能使代码困惑。它应该只在需要时才使用。

关于java - 通过构造函数传递实例或使用静态访问它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45180476/

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