【问题标题】:injector.getInstance of a generic type泛型类型的 injector.getInstance
【发布时间】:2015-02-16 22:13:23
【问题描述】:

我看过这个post 关于注册泛型类型。

注册示例:

 bind(new TypeLiteral<Dal<RoutingResponse>>() {}).to((Class<? extends Dal<RoutingResponse>>) ResponseDal.class);

但是如何从注入器中获取泛型类型的实例?

我试过了:

injector.getInstance(Dal<RoutingResponse>().getClass());

但出现编译错误。

我该怎么写?

【问题讨论】:

  • 我实际上不确定它是否是重复的,因为我看不到您发布的两个 sn-ps 之间的关系。这有帮助吗? stackoverflow.com/questions/2581137/…
  • 重新表述了我的问题。我很抱歉这个错误

标签: java class generics dependency-injection guice


【解决方案1】:

您可以使用Key 获取这些绑定的实例:

injector.getInstance(new Key<Dal<RoutingResponse>>() {}); // supplied by @DanielPryden in the comments

或更长的版本,带有TypeLiteral

injector.getInstance(Key.get(new TypeLiteral<Dal<RoutingResponse>>() {}));

【讨论】:

  • 或者直接使用Keynew Key&lt;Dal&lt;RoutingResponse&gt;&gt;() {}会做同样的事情,而且更短。
  • 嗨,我正在尝试做类似的事情,但是我的泛型类有另一个注入的 dep。现在我必须获取依赖项并将其放入构造函数中,有没有办法避免这种情况?代码示例 - Dep dep = injector.getInstance(Dep.class); injector.getInstance(Key.get(new TypeLiteral&lt;Dal&lt;RoutingResponse&gt;&gt;(dep) {})); 我可以像 injector.getInstance(Key.get(new TypeLiteral&lt;Dal&lt;RoutingResponse&gt;&gt;(dep) {})); 这样简单地写它,让 guice 处理 dep 的 DI 吗?
猜你喜欢
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多