Java 构造函数注入到只包含静态方法的类?
我正在开发一个与专有硬件接口的API。在这个API中,我构造了一个实用程序类(为了本文的目的,我们称它为Java 构造函数注入到只包含静态方法的类?,java,dependency-injection,static,Java,Dependency Injection,Static,我正在开发一个与专有硬件接口的API。在这个API中,我构造了一个实用程序类(为了本文的目的,我们称它为B),它只包含静态方法。这些方法中的大多数依赖于另一个类与硬件进行通信,我们将其称为A。我目前有点不确定如何设计B对a的依赖关系,因为我无法实例化B并使用构造函数注入来注入依赖关系。从设计的角度来看,对这种行为建模的最佳方式是什么 对于更多的实际操作描述,以下是我试图实现的目标。让我们假设A具有类似于这样的某些其他类的声明 class A { private HardwareCommun
B
),它只包含静态方法。这些方法中的大多数依赖于另一个类与硬件进行通信,我们将其称为A
。我目前有点不确定如何设计B
对a
的依赖关系,因为我无法实例化B
并使用构造函数注入来注入依赖关系。从设计的角度来看,对这种行为建模的最佳方式是什么
对于更多的实际操作描述,以下是我试图实现的目标。让我们假设A
具有类似于这样的某些其他类的声明
class A
{
private HardwareCommunicator communicator;
private ModelLoader modelLoader;
public HardwareCommunicator getCommunicator()
{
return communicator;
}
public ModelLoader getModelLoader()
{
return modelLoader;
}
}
而B
则有类似这样的static
方法,它们试图使用A
中声明的一些成员
class B
{
public static PerformOperation()
{
AnotherClass c = new AnotherClass();
c.someMethod(someValue, hardwareCommunicator.getCommunicator()); // Needs reference
}
}
显然,B
需要一个对a
的引用,因此我目前正在尝试将依赖项作为参数传递给方法,如下所示:
class B
{
public static PerformOperation(HardwareCommunicator communicator) // Passed as argument
{
AnotherClass c = new AnotherClass();
c.someMethod(someValue, communicator.doSomething()); // OK, so far so good
}
}
现在我遇到了一个问题,我有时需要更多的依赖项,而不仅仅是B
中的通信器,例如,在B
中的另一个静态方法中,我可能需要硬件通讯器和模型加载器
class B
{
public static SomeOtherOperation(HardwareCommunicator communicator)
{
AnotherClass c = new AnotherClass();
c.SomeMethod(someValue, communicator.doSomething(),
ModelLoader.getModelLoader()); // Missing reference
}
}
好的,我也可以把它作为一个参数传递,但现在我想我有一个架构问题。我应该(不是吗?)可以走了
class B
{
public static SomeOtherOperation()
{
AnotherClass c = new AnotherClass();
c.someMethod(someValue, instanceOfA.getCommunicator(),
instanceOfA.getModelLoader());
}
}
如果不能在B
上调用构造函数并传入a
的实例,我显然无法实现这种行为
我错过了什么?谢谢。您能否将A
的实例初始化为B
的编译时常量成员,并从中引用它?如果A
字段在每次调用时都会更改,那么您可能只需要将A
的一个实例作为方法调用的参数,并从中获取其字段。为什么B
只提供静态方法?@Mena感谢您的评论,我很抱歉没有尽快回复您。据我所知,编译时常量必须是基元类型或字符串,因此我认为这不是一个可行的选项。@AndrewS,就像我告诉Mena的那样,感谢您的评论,并为这么晚才回来表示歉意。我被要求这个类必须只公开静态方法,但也许我需要对此提出质疑。@kdhansen不用担心,我必须承认我关于“编译时常量”的陈述在回顾中没有任何意义。我的意思是,您可以使用B
的最终静态a
成员。