Я пытаюсь сделать обратный поиск на нескольких классах enum, реализующих тот же интерфейс Field
, перебирая список Class
es, используя Maps.uniqueIndex
в Guava:
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
, содержащий Fields.valueOfSearchName
метод:
public static <E extends Enum<E> & Field> Field valueOfSearchName(
final Class<E> clazz, final String searchName) {
// TODO: cache the index
final ImmutableMap<String, E> index = Maps.uniqueIndex(
EnumSet.allOf(clazz), GET_SEARCH_NAME_FUNCTION);
return index.get(searchName);
}
К сожалению, Eclipse показывает ошибку:
Bound mismatch:
The generic method valueOfSearchName(Class<E>, String) of type Fields is not
applicable for the arguments (Class<capture#1-of ? extends Enum<?>>, String).
The inferred type capture#1-of ? extends Enum<?> is not a valid substitute
for the bounded parameter <E extends Enum<E> & Field>
Проблема в Class<? extends Enum<?>> clazz
в цикле for-each (не соответствует Field) , но я не знаю, как справиться с этим делом (очевидно, я не могу добавить & Field
к clazz
).