Java 构造函数注入到只包含静态方法的类?

Java 构造函数注入到只包含静态方法的类?,java,dependency-injection,static,Java,Dependency Injection,Static,我正在开发一个与专有硬件接口的API。在这个API中,我构造了一个实用程序类(为了本文的目的,我们称它为B),它只包含静态方法。这些方法中的大多数依赖于另一个类与硬件进行通信,我们将其称为A。我目前有点不确定如何设计B对a的依赖关系,因为我无法实例化B并使用构造函数注入来注入依赖关系。从设计的角度来看,对这种行为建模的最佳方式是什么 对于更多的实际操作描述,以下是我试图实现的目标。让我们假设A具有类似于这样的某些其他类的声明 class A { private HardwareCommun

我正在开发一个与专有硬件接口的API。在这个API中,我构造了一个实用程序类(为了本文的目的,我们称它为
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
成员。