Ich versuche, eine Klasse Generic (sagen ClassA) in einer anderen Klasse (sagen ClassB) mit Guice mit @Inject Annotation zu injizieren. Der Code der Klasse, die eingespritzt wird, ist unten gezeigt:Fehler beim Eingeben einer Klasse mit generischem Typ @Inject Guice
public interface InterfaceA<T> {
}
public class ClassA<T> implements InterfaceA<T> {
private final Class<T> data;
private Dependency1 dependency1;
@Inject
public ClassA(Class<T> data, Dependency1 dependency1) {
this.data = data;
this.dependency1 = dependency1;
}
}
Code of ClassB ist wie folgt:
public class ClassB {
private InterfaceA<Entity1> interfaceA;
@Inject
public ClassB(InterfaceA<Entity1> interfaceA) {
this.interfaceA = interfaceA;
}
}
Die Modulklasse ist wie folgt:
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<InterfaceA<Entity1>>(){}).to(new TypeLiteral<InterfaceA<Entity1>>(){});
}
}
Jedoch Wenn die Anwendung gestartet wird, wird der folgende Fehler angezeigt:
ERROR [2017-01-14 19:54:00,646] com.hubspot.dropwizard.guice.GuiceBundle: Exception occurred when creating Guice Injector - exiting
! com.google.inject.CreationException: Unable to create injector, see the following errors:
!
! 1) Could not find a suitable constructor in java.lang.Class. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
! at java.lang.Class.class(Class.java:119)
Irgendwelche Eingaben, wie man das löst, wären wirklich hilfreich. Danke im Voraus.
Warum versuchen Sie, 'Class' in etwas zu injizieren? Ist das nicht der springende Punkt, dass Sie den Typ im Modul kennen? –
durron597
Ich möchte es injizieren, weil ich wissen möchte, um die Klasse zu injizieren, die zur Laufzeit injiziert wird. – user3375226
Das scheint gegen den Punkt der OO-Programmierung zu gehen. Auch haben alle Klassen eine '.getClass' Methode, die nicht ausreicht? – durron597