java – Guice Bind Generic Types
•
Java
Is there any way to bind the generic type of the following type:
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);
}
}
How can I fully bind the above interface and its implementation (using typeliteral?), So that I can create a typed instance through some condition?
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
}
}
How does mymodule look?
Solution
What you lack is,
Injector injector = Guice.createInjector(new MyModule());
A a1 = injector.getInstance(Key.get(new TypeLiteral<A<Integer>>() {}));
And your mymodule
public static class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<A<Integer>>() {}).toInstance(new B());
}
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
