java - Guice 绑定泛型类型
问题描述
有没有办法绑定下一种泛型类型:
public interface A<T extends Number> {
void print(T t);
}
public class B implements A<Integer> {
@Override
public void print(Integer i) {
System.out.println(i);
}
}
public class C implements A<Double> {
@Override
public void print(Double d) {
System.out.println(d);
}
}
我怎样才能准确地绑定上面的接口及其实现(使用TypeLiteral
?),以便我可以通过某种条件创建一个类型化的实例?
class Main {
public static void main(String[] args) {
A a1 = Guice.createInjector(new MyModule()).getInstance( ??? );
a1.print(1); //will print 1
A a2 = Guice.createInjector(new MyModule()).getInstance( ??? );
a2.print(1.0); //will print 1.0
}
}
MyModule
假设看起来如何?
解决方案
你缺少的是,
Injector injector = Guice.createInjector(new MyModule());
A a1 = injector.getInstance(Key.get(new TypeLiteral<A<Integer>>() {}));
还有你的 MyModule
public static class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<A<Integer>>() {}).toInstance(new B());
}
}
推荐阅读
- php - 如何更改linux xampp中的PHP路径?
- python - 从自定义路径中提取 .ppm.bz2 到自定义路径
- javascript - 移动动画后按钮悬停不再起作用
- go - 动态类型断言 Golang
- excel - 我正在尝试使用 VBA 宏将信息从 excel 电子表格写入 Powerpoint
- r - databricks 上的 sql sparklyr sparkr 数据帧转换
- orientdb - 使用 SQL 语言创建 onBeforeCreate 动态钩子
- java - Java实例方法不同的调用方式
- java - 与补充表中的外键单向一对一映射?
- knative-serving - 如何在我自己的本地 k8s 集群上安装 knative 服务?