Я создал фиктивные классы, чтобы объяснить мою проблему. Рассмотрим этот класс Java, который есть в моем проекте.
import com.google.inject.Inject;
public class ExampleClass<T> {
private final Class<T> classType;
private ObjectSerializer objectSerializer;
//Constructor
@Inject
public ExampleClass(final Class<T> classType, final ObjectSerializer objectSerializer){
this.classType = classType;
this.objectSerializer = objectSerializer;
}
public T randomMethod(String hashKey, String rangeKey){
return objectSerializer.deserialize(dataBaseHelper.getData(hashKey, rangeKey), classType);
}
Предполагая, что я хочу инициализировать класс для Type ExamplePojo (T - ExamplePojo), я делаю следующее для инициализации экземпляра Singleton в Guice,
public class ExampleModule extends AbstractModule{
@Provides
@Singleton
public ExampleClass<ExamplePojo> provideExampleClass(ObjectSerialization objectSerialization){
return new ExampleClass<>(ExamplePojo.class, objectSerialization);
}
}
Когда я пытаюсь инициализировать свой сервер, я получаю следующее исключение.
[java] 1) java.lang.Class<T> cannot be used as a key; It is not fully specified.
[java] at com.service.ExampleClass.<init>(ExampleClass.java:XX)
...
...
[java]
[java] 1 error
[java] at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:466)
[java] at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:155)
[java] at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107)
[java] at com.google.inject.Guice.createInjector(Guice.java:99)
[java] at com.google.inject.Guice.createInjector(Guice.java:73)
[java] at com.google.inject.Guice.createInjector(Guice.java:62)
[java] at com.amazon.f1service.F1Service.main(F1Service.java:33)