Ад дженериков: Можно ли построить TypeLiteral> с помощью дженериков?

Единственный способ, которым я смог заставить нижеприведенный общий метод работать - это передать кажущийся избыточным параметр 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>> superClassSet параметр), я получу java.util.Set 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;
}
18
задан Jeff Axelrod 8 January 2012 в 14:41
поделиться