Я пытаюсь ввести класс Generic типа (скажем, ClassA) в другой класс (скажем, ClassB) с помощью Guice с аннотацией @Inject. Код класса, который впрыскивают показан ниже:Ошибка ввода класса с общим типом @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;
}
}
Кодекс ClassB выглядит следующим образом:
public class ClassB {
private InterfaceA<Entity1> interfaceA;
@Inject
public ClassB(InterfaceA<Entity1> interfaceA) {
this.interfaceA = interfaceA;
}
}
Класс модуля выглядит следующим образом:
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<InterfaceA<Entity1>>(){}).to(new TypeLiteral<InterfaceA<Entity1>>(){});
}
}
Однако, при запуске приложения возникает следующая ошибка:
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)
Любые входные данные о том, как решить эту проблему, будут действительно полезны. Заранее спасибо.
Почему вы пытаетесь ввести «класс» во что-то? Разве не все дело в том, что вы будете знать тип в модуле? –
durron597
Я хочу ввести его, потому что я хочу знать тип вводимого класса во время выполнения. – user3375226
Это похоже на то, что программирование OO. Также все классы имеют метод '.getClass', чего недостаточно? – durron597