Использование дженериков с коллекцией классов перечисления, реализующих тот же интерфейс

Я пытаюсь выполнить обратный поиск для нескольких классов перечисления, реализующих тот же интерфейс Field , перебирая список Class es, используя Guava's Maps.uniqueIndex :

  Field valueOfSearchName = null;
  for (final Class> clazz : ImmutableList.of(
      EntityField.class,
      AddressField.class,
      PersonFunctionType.class)) {
    valueOfSearchName = Fields.valueOfSearchName(clazz, term.field()); // error
    if (valueOfSearchName != null) {
      // do something...
      break;
    }
  }

Я не хочу повторять один и тот же код (для создания индекса и выполнения поиска) во всех классах перечисления, поэтому я использую вспомогательный статический класс Поля , содержащие Метод Fields.valueOfSearchName :

  public static  & Field> Field valueOfSearchName(
      final Class clazz, final String searchName) {
    // TODO: cache the index
    final ImmutableMap index = Maps.uniqueIndex(
        EnumSet.allOf(clazz), GET_SEARCH_NAME_FUNCTION);
    return index.get(searchName);
  }

К сожалению, Eclipse показывает ошибку:

Bound mismatch: 
The generic method valueOfSearchName(Class, String) of type Fields is not 
applicable for the arguments (Class>, String).
The inferred type capture#1-of ? extends Enum is not a valid substitute
for the bounded parameter  & Field>

Проблема в том, что Class Extends Enum >> clazz в цикле for-each (не соответствует Field) , но я не знаю, как поступить с этим случаем (очевидно, я не могу добавить & Field к clazz ).

6
задан Community 23 May 2017 в 12:14
поделиться