Единственный способ, с помощью которого я мог использовать нижеприведенный общий метод, - передать лишний TypeLiteral<Set<T>>
параметр. Я считаю, что это можно было бы программировать с помощью другого параметра, но не могу понять, как это сделать.
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<Set<T>> superClassSet
), я получаю ошибку выполнения java.util.Set<T> cannot be used as a key; It is not fully specified.
.
protected <T> Key<Set<T>> bindMultibinder(TypeLiteral<T> superClass) {
final Key<Set<T>> multibinderKey = Key.get(
new TypeLiteral<Set<T>>() {}, randomAnnotation);
return multibinderKey;
}