java中函数指针的最重要的事情是什么?

可能重复:
什么是Java中函数指针的最近替代品?

我只是有一种情况,如果你可以在c或c ++中使用类似于函数指针的function,那将是很好的。 我能想到的最好的事情是组合Runnables并在不同的线程中启动它们。 建议?

在他们为java添加闭包之前,这个东西似乎最接近java.lang.reflect.Method 。 例如, Method method = SomeClass.getMethod("methodName", methodParameterTypes)

然后你可以传递method (比如函数指针)并在其上调用invoke(..) ,传递一个对象(如果是静态则为null

但这不是一个好习惯。 您可以定义接口,或使用现有的Runnable / Callable ,实现内联,并传递实例。

使用Functors ,又名函数对象。

Java没有第一类函数,因此函数对象通常由具有单个方法(最常见的是Callable接口)的接口表示,通常实现是匿名内部类。

您可能正在寻找命令模式 ,它基本上定义了一个具有一个方法的接口(比如execute() )和为不同的操作实现此方法的类。 您可以使用对这些类的实例的引用,就像C ++中的函数指针一样。 这种模式通常用于实现解释器。

一种选择是使用java.lang.reflect.Method ,如Bozho的答案中所述。 它非常灵活,但主要的缺点是你失去了所有类型的安全性 – 没有检查你是否使用正确的参数调用方法(并期望正确的返回类型)。

因此,如果您稍后更改方法,并忘记更改所有调用方,则只能在运行时找到(通过ClassCastException )。 甚至方法名称也只在运行时检查(因为您按名称获取它)。

另一种方法是通过接口使用回调。 想要接受另一个方法作为参数的方法只需要某个接口的实例。 该接口只有一个方法doStuff 。 然后,您可以创建实现该接口的实例,并将这些实例传递给方法。 这有点冗长(因为你需要接口),但是类型安全,因此更容易重构。

这或多或少是命令模式 ,BTW。

回调是一种实现类似于C ++中的函数指针的方法。
另外,它们是类型安全的(与函数指针不同,可能不是)。