java – Guice Bind Generic Types
发布时间:2020-12-15 08:26:19 所属栏目:Java 来源:网络整理
导读:有没有办法绑定下一种类型的泛型类型: public interface AT extends Number { void print(T t);}public class B implements AInteger { @Override public void print(Integer i) { System.out.println(i); }}public class C implements ADouble { @Override
有没有办法绑定下一种类型的泛型类型:
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()); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |