Я пытаюсь выполнить обратный поиск для нескольких классов перечисления, реализующих тот же интерфейс Field
, перебирая список Class
es, используя Guava's Maps.uniqueIndex
:
Field valueOfSearchName = null;
for (final Class extends Enum>> 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
).