Sid*_*tha 2 java java-8 method-reference
我有一个函数列表,所有这些函数都扩展了Consumer接口.我需要提取出函数的索引.这样做的原因是我正在实现循环工作流,其中用户按顺序调用列表中的函数.因此,当用户使用foo完成时,foo调用一个调度程序函数,该函数在列表中的foo之后调度该函数.为此,foo需要知道列表中自己的索引.我不想硬编码数字,这就是我试图检索foo索引的原因.这就是我所拥有的:
import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.function.Consumer;
public class Experiment {
private List<Consumer<String>> activities = ImmutableList.of(
this::bar,
this::foo
);
public void bar(String x) {
System.out.println();
}
public void foo(String x) {
System.out.println();
}
public void print() {
System.out.println(activities.indexOf((Consumer<String>)this::foo));
}
public static void main(String []args) {
Experiment e = new Experiment();
e.print();
}
}
Run Code Online (Sandbox Code Playgroud)
这打印-1给我,所以它无法在列表中找到它.有没有办法从这个列表中提取出函数的索引?
从语言中无法保证通过评估相同方法(或构造函数)引用或相同lambda表达式得到的实例将始终相同.
您唯一的选择(关于上述方法引用)是第一次捕获对象的引用并重用它
private final Consumer<String> barConsumer = this::bar;
private final Consumer<String> fooConsumer = this::foo;
private final List<Consumer<String>> activities = ImmutableList.of(barConsumer, fooConsumer);
public void print() {
System.out.println(activities.indexOf(fooConsumer);
}
Run Code Online (Sandbox Code Playgroud)
虽然目前还不清楚你为什么要这样做.