Java 中的函数指针
2022-08-31 07:14:09
这可能是一些常见和微不足道的事情,但我似乎很难找到具体的答案。在 C# 中有一个委托的概念,它与来自 C++ 的函数指针的概念密切相关。Java中是否有类似的功能?鉴于指针有些缺失,最好的方法是什么?需要明确的是,我们在这里谈论的是头等舱。
这可能是一些常见和微不足道的事情,但我似乎很难找到具体的答案。在 C# 中有一个委托的概念,它与来自 C++ 的函数指针的概念密切相关。Java中是否有类似的功能?鉴于指针有些缺失,最好的方法是什么?需要明确的是,我们在这里谈论的是头等舱。
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);
您可以使用接口替换函数指针。假设你想运行一个集合,并对每个元素执行一些操作。
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++;
}
});