如何创建方法引用列表?

我需要处理一个列表,并为每个项目调用目标对象上的不同方法。 看起来很优雅,我可以创建一个方法引用列表来执行此操作,因此对于列表中的每个索引,我可以调用与其对应的适当方法引用。

private final static List<Consumer> METHODS = (List<Consumer>) Arrays.asList( TargetClass::setValue1, TargetClass::setValue2, TargetClass::setValue3, TargetClass::setValue4, TargetClass::setValue5); 

但是,Eclipse会使用错误标记这些错误。此表达式的目标类型必须是function接口 。 现在,TargetClass这里是一个普通的类,而不是一个接口…这是否意味着没有办法完成我在这里尝试做的事情?

您的方法引用可能与Consumerfunction接口不匹配。

例如,此代码通过编译:

  private final static List> METHODS = Arrays.asList( Double::valueOf, Integer::valueOf, String::length); 

由于您的方法似乎不是静态的,因此它们与Consumer不匹配,因为这些方法有一个额外的隐式参数 – 该方法将应用于的实例。

您可以使用BiConsumer

 private final static List> METHODS = Arrays.asList( TargetClass::setValue1, TargetClass::setValue2, TargetClass::setValue3, TargetClass::setValue4, TargetClass::setValue5);