从函数指针列表中获取函数的索引

Getting index of a function from a List of function pointers

我有一个函数列表,所有这些函数都扩展了 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();
  }
}

它为我打印了 -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);
}  

虽然还不清楚你为什么想要这个。