当前位置: 首页 > 面试题库 >

Guice:如何获取TypeLiteral包装的泛型实例?

晁绍辉
2023-03-14
问题内容

我有一个通用的数据库访问类,我使用TypeLiteral构造进行绑定。现在在测试中,我想模拟该类,为此我创建了一个提供程序,该提供程序创建了一个模拟实例。在我的测试中,我想访问该模拟以定义其行为。现在的问题是,我该如何从喷油器取回物体?

那是我的绑定定义:

binder.bind(new TypeLiteral<GenericDbClass<Integer>>(){}).GenericDbClassProvider.class);

通常我会得到一个这样的实例:

injector.getInstance(GenericDbClass.class);

但是由于我没有将GenericDbClass的实现绑定到Interface本身,所以我不知道该怎么做。我认为要复杂吗?

任何想法/帮助将不胜感激!


问题答案:

使用Guice的Key工具正是针对此类问题而设计的。就你而言

injector.getInstance(Key.get(new TypeLiteral<GenericDbClass<Integer>>(){});

会成功的



 类似资料:
  • 问题内容: Guice的TypeLiteral如何克服Java通用类型擦除过程? 它行之有效,但如何实现呢? 问题答案: 这里使用的技巧是通用超类型的签名存储在子类中,因此可以 在 擦除后保留 下来 。 如果您创建一个匿名子类吉斯可以调用它,并得到了其上存在的方法来获得作为一个实例。

  • 问题内容: 那么,如何在Java中执行以下操作? 该问题专门发生在List.class上,返回的错误是: 问题答案: 你不能 使用最接近您想要的近似值。 这是因为没有,因为在运行时,,,,并且都在Java中的相同。出于种种原因故意进行此操作,这称为类型擦除。

  • 如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或

  • 问题内容: 如何获得泛型的“真实”类? 例如: 如果T =整数 输出: 如果T =字符串 输出: 谢谢 问题答案: 如果您的类中有一个实例类型T的实例变量,并且碰巧已设置好该变量,则可以打印该变量的类。

  • 问题内容: 我有一个泛型类。在一种方法中,我想获取的类实例,但我无法调用。 使用它解决问题的首选方法是什么? 问题答案: 简短的答案是,无法找到Java中泛型类型参数的运行时类型。我建议阅读Java教程中有关类型擦除的章节以获取更多详细信息。 一个流行的解决方案是Class将type参数的传递给泛型类型的构造函数,例如

  • 在我的<code>模块中。scala我绑定了一个特性的具体实现,定义如下: 并且使用< code>TypeLiteral完成绑定: 现在,我需要在使用 Mockito 模拟进行测试时覆盖此绑定: 但我得到以下错误: 我该如何解决这个问题? 这个问题涉及到如何使用Scala Guice绑定一个用一元类型参数扩展Trait的类?