guice를 배우기 시작했고 guice를 사용하여 일반적인 유형을 주입하기 시작했습니다. 그물에있는 모든 솔루션은 new TypeLiteral<Generic<Type>>(){}
과 같은 것을 사용하는 것 같습니다. 그러나이 작업을 수행하려고하면 TypeLiteral
의 생성자가 보호되어 있음을 보여줍니다. TypeLiteral.get()
을 사용하여 제네릭 주입을 수행하려면 어떻게합니까? 샘플 코드 :typeliteral하지만 typeliteral 생성자가 guice에 제네릭을 주입했습니다.
public interface Repository<T> {
void save(T item);
T get(int id);
}
public StringRepository implements Repository<String> {
@Override
public void save(String item) {
// do saving
}
@Override
public String get(int id) {
// get item and return
return item;
}
}
public MyModule extends AbstractModule{
@Override
public void configure() {
....
TypeLiteral<Repository<String>> typeLiteral =
TypeLiteral.get((Repository<String>.class));//does not work
//does not work either because constructor is protected
bind(new TypeLiteral<Repository<String>>(){}).to(StringRepository.class);
}
}
"생성자가 보호되어 있기 때문에 작동하지 않습니다."protected는 하위 클래스에서 액세스 할 수 있음을 의미하므로 액세스 할 수 있어야합니다. 내 말은, 이것은 문서가 그것을 사용하는 방법을 정확하게 말한 것입니다 ... –
나는 그것도 잘 작동 했으므로 노력했고, 그렇게합니다. 정확히 무엇이 당신이 그것을 작동하지 않는다고 생각하게하는지 보십니까? –
귀하의 스크린 샷은 질문의 코드와 완전히 다릅니다. {} 없이는 작동하지 않습니다. –