假设我有一个通用接口:
interface MyComparable<T extends Comparable<T>> {
public int compare(T obj1, T obj2);
}
Run Code Online (Sandbox Code Playgroud)
一个方法sort:
public static <T extends Comparable<T>>
void sort(List<T> list, MyComparable<T> comp) {
// sort the list
}
Run Code Online (Sandbox Code Playgroud)
我可以调用此方法并将lambda表达式作为参数传递:
List<String> list = Arrays.asList("a", "b", "c");
sort(list, (a, b) -> a.compareTo(b));
Run Code Online (Sandbox Code Playgroud)
那会很好.
但现在如果我使接口非泛型,并且方法通用:
interface MyComparable {
public <T extends Comparable<T>> int compare(T obj1, T obj2);
}
public static <T extends Comparable<T>>
void sort(List<T> list, MyComparable comp) {
}
Run Code Online (Sandbox Code Playgroud)
然后调用它:
List<String> list = Arrays.asList("a", "b", "c");
sort(list, (a, …Run Code Online (Sandbox Code Playgroud) 我试图通过使用Guava 迭代es 列表来对几个实现相同接口的枚举类进行反向查找:FieldClassMaps.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;
}
}
Run Code Online (Sandbox Code Playgroud)
我不想在所有枚举类中重复相同的代码(用于制作索引和执行查找),因此我使用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);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,Eclipse显示错误:
Bound …Run Code Online (Sandbox Code Playgroud)