当前位置: 首页 > 知识库问答 >
问题:

将多个接口实现注入到类构造函数中

丁鸿信
2023-03-14

我是Java Guice的新手,在设计应用程序时遇到麻烦。
我将尝试尽可能简单地解释我的设计和期望的结果。

我有一个名为 Ialgorithm 的接口,以及该接口的 3 个实现,比如 IalgorithmA、IalgorithmBIalgirthmC

我有一个名为myClass的类,带有以下构造函数:

public myClass(Ialgorithm alg) {...}

现在我希望能够使用注解注入I

// ... intialize an Injector with a Moudle that extents AbstractModule
myClass a = injecotr.getInstance(key.get(myClass.class,Aannotation.class));
myClass b = injecotr.getInstance(key.get(myClass.class,Bannotation.class));
myClass c = injecotr.getInstance(key.get(myClass.class,Cannotation.class));

我在网上读了一些教程,但我找不到实现这一点的确切方法。

此外,在解决了上述问题之后,我扩展了我的问题:实际上,第三个实现,IalgithmC,不同于其他两个包含默认构造函数的实现:它的构造函数是:

public IalgorithmC(Ialgorithm,int n) {...}

现在它变得更加复杂...因为我希望 Guice 注入 Ialgorithm 参数,但 int 参数不应该由 Guice (@Assisted) 注入,并且在使用 Cannotaion 时应该将整个 IalgorithmC 实例注入到 myClass 中。
当然,我应该为 int 参数提供一个值,并在 IalgorithmC 中为内部 Ialgorithm 提供注释。

谢谢大家的帮助。


共有1个答案

姜明贤
2023-03-14

这个问题讨论了guice中多个实现的一种解决方案。

 类似资料:
  • 看来Guice正在尝试使用不同于预期的创建方法。你知道怎么解决这个问题吗?如有任何指示,将不胜感激! 谢谢!

  • 问题内容: 关于接口和类,这让我感到困扰。 我正在尝试通过名为IPAddressString的类对名为IPAddress的接口进行实施。Ipadress包含四个部分。 我正在编写一个名为mask的方法,该方法用给定的地址屏蔽当前地址。掩码操作是对地址的所有四个部分进行按位“与”操作。您可以通过我编写的名为getOc​​tet的方法来获得所有四个部分。(您可以在下面看到)。 好的,所以我需要掩盖我的

  • 问题内容: 我知道不可能在接口中定义构造函数。但是我想知道为什么,因为我认为这可能非常有用。 因此,您可以确定为该接口的每种实现定义了类中的某些字段。 例如,考虑以下消息类: 如果为该类定义一个接口,以便我可以有更多实现消息接口的类,则只能定义send方法,而不能定义构造函数。那么,如何确保此类的每个实现都确实有一个接收者集?如果我使用类似的方法,则不能确定是否真的调用了该方法。在构造函数中,我可

  • 问题内容: 我已经用策略模式实现了一个程序。所以我有一个在某些地方使用的接口,并且可以替换具体的实现。 现在我要测试该程序。我想以类似的方式做。编写一次测试,针对该接口进行测试。应在测试开始时注入具体的接口实现,以便我可以轻松地替换它。 我的测试类看起来与此类似: 在开始测试时,必须使用参数化的构造器来注入具体的策略实施。 现在我没有让TestNG运行它并注入具体的实现实例。我试图与继承几种方法,

  • 我正在尝试修改类Circle以包含第三个构造函数,用于构造具有两个参数的Circle实例——半径的双精度和颜色的字符串。还修改主类以使用此构造函数构造Circle的实例。我对此有困难,我一直收到从未使用构造函数Circle的消息。请查看代码。

  • 我有一个父类,其中包含构造函数注入的依赖项: 如果我从这个类继承,我总是需要重新定义一个调用父构造函数的构造函数吗? 使用 setter 注入,我似乎能够将依赖项保留在父类中,而不需要在子类中重新连接它,如果子类不接触链接到依赖项的功能,这对我来说听起来不错: 看起来,如果我想避免重复自动装配代码和处理子组件中的依赖关系,我只能使用setter或field injection来实现。 是否有更简洁