如何创建方法引用列表?
How can I create a list of method references?
我需要处理一个列表,并为每个项目调用目标对象上的不同方法。我可以创建一个方法引用列表来执行此操作似乎很优雅,因此对于列表中的每个索引,我可以调用与其对应的适当方法引用。
private final static List<Consumer<String>> METHODS = (List<Consumer<String>>) Arrays.asList(
TargetClass::setValue1,
TargetClass::setValue2,
TargetClass::setValue3,
TargetClass::setValue4,
TargetClass::setValue5);
但是,Eclipse 将这些标记为错误此表达式的目标类型必须是函数式接口。现在,这里的 TargetClass 是一个常规的 class,而不是一个接口...这是否意味着没有办法完成我在这里尝试做的事情?
您的方法引用可能与 Consumer<String>
功能接口不匹配。
例如,这段代码通过了编译:
private final static List<Consumer<String>> METHODS = Arrays.asList(
Double::valueOf,
Integer::valueOf,
String::length);
由于您的方法似乎不是静态的,因此它们不匹配 Consumer<String>
,因为这些方法有一个额外的隐式参数 - 将应用该方法的实例。
您可以使用 BiConsumer<TargetClass,String>
:
private final static List<BiConsumer<TargetClass,String>> METHODS = Arrays.asList(
TargetClass::setValue1,
TargetClass::setValue2,
TargetClass::setValue3,
TargetClass::setValue4,
TargetClass::setValue5);
我需要处理一个列表,并为每个项目调用目标对象上的不同方法。我可以创建一个方法引用列表来执行此操作似乎很优雅,因此对于列表中的每个索引,我可以调用与其对应的适当方法引用。
private final static List<Consumer<String>> METHODS = (List<Consumer<String>>) Arrays.asList(
TargetClass::setValue1,
TargetClass::setValue2,
TargetClass::setValue3,
TargetClass::setValue4,
TargetClass::setValue5);
但是,Eclipse 将这些标记为错误此表达式的目标类型必须是函数式接口。现在,这里的 TargetClass 是一个常规的 class,而不是一个接口...这是否意味着没有办法完成我在这里尝试做的事情?
您的方法引用可能与 Consumer<String>
功能接口不匹配。
例如,这段代码通过了编译:
private final static List<Consumer<String>> METHODS = Arrays.asList(
Double::valueOf,
Integer::valueOf,
String::length);
由于您的方法似乎不是静态的,因此它们不匹配 Consumer<String>
,因为这些方法有一个额外的隐式参数 - 将应用该方法的实例。
您可以使用 BiConsumer<TargetClass,String>
:
private final static List<BiConsumer<TargetClass,String>> METHODS = Arrays.asList(
TargetClass::setValue1,
TargetClass::setValue2,
TargetClass::setValue3,
TargetClass::setValue4,
TargetClass::setValue5);