Generics Hell: Могу ли я создать TypeLiteral <Set <T >> с использованием обобщений?
Единственный способ заставить работать приведенный ниже универсальный метод - это передать, казалось бы, избыточный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;
}