当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《从函数指针列表中获取函数的索引》经验,为你挑选了1个好方法。

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

  public static void main(String []args) {
    Experiment e = new Experiment();
    e.print();
  }
}

这打印-1给我,所以它无法在列表中找到它.有没有办法从这个列表中提取出函数的索引?



1> Sotirios Del..:

从语言中无法保证通过评估相同方法(或构造函数)引用或相同lambda表达式得到的实例将始终相同.

您唯一的选择(关于上述方法引用)是第一次捕获对象的引用并重用它

private final Consumer barConsumer = this::bar;
private final Consumer fooConsumer = this::foo;
private final List> activities = ImmutableList.of(barConsumer, fooConsumer);

public void print() {
    System.out.println(activities.indexOf(fooConsumer);
}  

虽然目前还不清楚你为什么要这样做.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有