Hi,
Is it possible to inject a generic object as the below code sample
attempts to do? The below code compiles but throws an error see below
for stack.
I've tried to search the discussion boards regarding this issue, and
while it seems it is not possible in Guice 1.0, it is indicated in
http://publicobject.com/2008/11/guice-punches-erasure-in-face.html,
that this is possible in Guice 2.0.
I'm extremely new to Guice, so it's entirely possible I have missed
something fundamental. Any help would be greatly appreciated.
Matt G.
[java]
class Foo<T> {
private final Bar<T> bar;
@Inject
Foo(Bar<T> bar) {
this.bar = bar;
}
public Bar<T> getBar() {
return bar;
}
public static void main(String[] args) {
Injector injector = Guice.createInjector(new MyModule());
Foo<String> stringFoo = injector.getInstance(new
Key<Foo<String>>() {});
System.out.println(stringFoo.getBar().getValue());
}
}
class Bar<T> {
private final T t;
@Inject
Bar(T t) {
this.t = t;
}
public T getValue() {
return t;
}
}
class MyModule extends AbstractModule {
protected void configure() {
bind(String.class).toInstance("Hello");
}
}
[\java]
/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/
java -Dfile.encoding=MacRoman -classpath /System/Library/Frameworks/
JavaVM.framework/Versions/1.5.0/Home/lib/deploy.jar:/System/Library/
Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/dt.jar:/System/
Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/
javaws.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/
Home/lib/jce.jar:/System/Library/Frameworks/JavaVM.framework/Versions/
1.5.0/Home/lib/plugin.jar:/System/Library/Frameworks/JavaVM.framework/
Versions/1.5.0/Home/lib/sa-jdi.jar:/System/Library/Frameworks/
JavaVM.framework/Versions/1.5.0/Home/../Classes/charsets.jar:/System/
Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/../Classes/
classes.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/
Home/../Classes/dt.jar:/System/Library/Frameworks/JavaVM.framework/
Versions/1.5.0/Home/../Classes/jce.jar:/System/Library/Frameworks/
JavaVM.framework/Versions/1.5.0/Home/../Classes/jconsole.jar:/System/
Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/../Classes/
jsse.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/
Home/../Classes/laf.jar:/System/Library/Frameworks/JavaVM.framework/
Versions/1.5.0/Home/../Classes/ui.jar:/System/Library/Frameworks/
JavaVM.framework/Versions/1.5.0/Home/lib/ext/apple_provider.jar:/
System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/ext/
dnsns.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/
Home/lib/ext/localedata.jar:/System/Library/Frameworks/
JavaVM.framework/Versions/1.5.0/Home/lib/ext/sunjce_provider.jar:/
System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/ext/
sunpkcs11.jar:/Users/matt/IdeaProjects/GuiceExample/out/production/
GuiceExample:/Users/matt/Downloads/guice-snapshot20081123/guice-
snapshot20081123.jar genericinjection.Foo
Exception in thread "main" java.lang.NoClassDefFoundError: [Lorg/
aopalliance/intercept/MethodInterceptor;
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2395)
at java.lang.Class.getDeclaredMethods(Class.java:1763)
at com.google.inject.internal.ProviderMethodsModule.getProviderMethods
(ProviderMethodsModule.java:94)
at com.google.inject.internal.ProviderMethodsModule.configure
(ProviderMethodsModule.java:86)
at com.google.inject.spi.Elements$RecordingBinder.install
(Elements.java:160)
at com.google.inject.spi.Elements$RecordingBinder.install
(Elements.java:169)
at com.google.inject.spi.Elements.getElements(Elements.java:94)
at com.google.inject.InjectorBuilder.buildStatically
(InjectorBuilder.java:120)
at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:97)
at com.google.inject.Guice.createInjector(Guice.java:92)
at com.google.inject.Guice.createInjector(Guice.java:69)
at com.google.inject.Guice.createInjector(Guice.java:59)
at genericinjection.Foo.main(Foo.java:23)
Process finished with exit code 1