Java 中的函数指针数组

2022-09-02 23:08:24

我已经阅读了这个问题,但我仍然不确定是否可以在Java的数组中保留指向方法的指针。如果有人知道这是否可能(或不可能),那将是一个真正的帮助。我试图找到一个优雅的解决方案,保留一个列表和相关函数,而不写一堆数百个语句。Stringif

干杯


答案 1

Java本身没有函数指针(或C#术语中的“委托”)。这种事情往往是用匿名子类完成的。

public interface Worker {
  void work();
}

class A {
  void foo() { System.out.println("A"); }
}

class B {
  void bar() { System.out.println("B"); }
}

A a = new A();
B b = new B();

Worker[] workers = new Worker[] {
  new Worker() { public void work() { a.foo(); } },
  new Worker() { public void work() { b.bar(); } }
};

for (Worker worker : workers) {
  worker.work();
}

答案 2

您可以使用函子模式获得相同的结果。例如,有一个抽象类:

abstract class Functor
{
  public abstract void execute();
}

您的“函数”实际上是派生类中的执行方法。然后,创建一个函子数组,并使用专有的派生类填充它:

class DoSomething extends Functor
{
  public void execute()
  {
    System.out.println("blah blah blah");
  }
}

Functor [] myArray = new Functor[10];
myArray[5] = new DoSomething();

然后你可以调用:

myArray[5].execute();