相关疑难解决方法(0)

Lambda表达式和通用方法

假设我有一个通用接口:

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)

java generics lambda java-8

103
推荐指数
3
解决办法
6万
查看次数

使用泛型与实现相同接口的枚举类的集合

我试图通过使用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)

java generics enums guava

6
推荐指数
1
解决办法
3254
查看次数

标签 统计

generics ×2

java ×2

enums ×1

guava ×1

java-8 ×1

lambda ×1