Java 中的函数指针

这可能是一些常见和微不足道的事情,但我似乎很难找到具体的答案。在 C# 中有一个委托的概念,它与来自 C++ 的函数指针的概念密切相关。Java中是否有类似的功能?鉴于指针有些缺失,最好的方法是什么?需要明确的是,我们在这里谈论的是头等舱。


答案 1

Java成语用于类似函数指针的功能是一个实现接口的匿名类,例如

Collections.sort(list, new Comparator<MyClass>(){
    public int compare(MyClass a, MyClass b)
    {
        // compare objects
    }
});

更新:在 Java 8 之前的 Java 版本中,上述内容是必需的。现在我们有更好的替代方案,即lambdas:

list.sort((a, b) -> a.isGreaterThan(b));

和方法参考:

list.sort(MyClass::isGreaterThan);

答案 2

您可以使用接口替换函数指针。假设你想运行一个集合,并对每个元素执行一些操作。

public interface IFunction {
  public void execute(Object o);
}

这是我们可以传递给一些人说的CollectionUtils2.doFunc(Collection c,IFunction f)的接口。

public static void doFunc(Collection c, IFunction f) {
   for (Object o : c) {
      f.execute(o);
   }
}

例如,我们有一个数字集合,您希望为每个元素添加1。

CollectionUtils2.doFunc(List numbers, new IFunction() {
    public void execute(Object o) {
       Integer anInt = (Integer) o;
       anInt++;
    }
});