Единственный способ, которым я смог заставить нижеприведенный общий метод работать - это передать кажущийся избыточным параметр TypeLiteral
. Я считаю, что этот параметр можно сконструировать программно, учитывая другой параметр, но не могу понять как.
protected <T> Key<Set<T>> bindMultibinder(
TypeLiteral<Set<T>> superClassSet, TypeLiteral<T> superClass) {
final Key<Set<T>> multibinderKey = Key.get(superClassSet, randomAnnotation);
return multibinderKey;
}
Код клиента выглядит так:
bindMultibinder(new TypeLiteral<Set<A<B>>>(){}, new TypeLiteral<A<B>>(){});
Где A и B - интерфейсы.
Если я попробую сделать следующее (удалив TypeLiteral
параметр), я получу java.util.Set
ошибка времени выполнения.
protected <T> Key<Set<T>> bindMultibinder(TypeLiteral<T> superClass) {
final Key<Set<T>> multibinderKey = Key.get(
new TypeLiteral<Set<T>>() {}, randomAnnotation);
return multibinderKey;
}