如何创建方法引用列表?
我需要处理一个列表,并为每个项目调用目标对象上的不同方法。 看起来很优雅,我可以创建一个方法引用列表来执行此操作,因此对于列表中的每个索引,我可以调用与其对应的适当方法引用。
private final static List<Consumer> METHODS = (List<Consumer>) Arrays.asList( TargetClass::setValue1, TargetClass::setValue2, TargetClass::setValue3, TargetClass::setValue4, TargetClass::setValue5);
但是,Eclipse会使用错误标记这些错误。此表达式的目标类型必须是function接口 。 现在,TargetClass这里是一个普通的类,而不是一个接口…这是否意味着没有办法完成我在这里尝试做的事情?
您的方法引用可能与Consumer
function接口不匹配。
例如,此代码通过编译:
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);