Java中的函数指针

Java中的函数指针

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



慕标5832272
浏览 946回答 3
3回答

犯罪嫌疑人X

类似于函数指针的功能的Java习惯用法是一个实现接口的匿名类,例如Collections.sort(list,&nbsp;new&nbsp;Comparator<MyClass>(){ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;compare(MyClass&nbsp;a,&nbsp;MyClass&nbsp;b) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;compare&nbsp;objects &nbsp;&nbsp;&nbsp;&nbsp;}});更新:在Java 8之前的Java版本中,上述内容是必需的。现在我们有更好的替代方案,即lambdas:list.sort((a,&nbsp;b)&nbsp;->&nbsp;a.isGreaterThan(b));和方法参考:list.sort(MyClass::isGreaterThan);

慕少森

您可以使用接口替换函数指针。假设你想要运行一个集合并对每个元素做一些事情。public&nbsp;interface&nbsp;IFunction&nbsp;{ &nbsp;&nbsp;public&nbsp;void&nbsp;execute(Object&nbsp;o);}这是我们可以传递给CollectionUtils2.doFunc(Collection c,IFunction f)的接口。public&nbsp;static&nbsp;void&nbsp;doFunc(Collection&nbsp;c,&nbsp;IFunction&nbsp;f)&nbsp;{ &nbsp;&nbsp;&nbsp;for&nbsp;(Object&nbsp;o&nbsp;:&nbsp;c)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.execute(o); &nbsp;&nbsp;&nbsp;}}举个例子说我们有一个数字集合,你想为每个元素添加1。CollectionUtils2.doFunc(List&nbsp;numbers,&nbsp;new&nbsp;IFunction()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;execute(Object&nbsp;o)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;anInt&nbsp;=&nbsp;(Integer)&nbsp;o; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anInt++; &nbsp;&nbsp;&nbsp;&nbsp;}});

一只萌萌小番薯

你可以使用反射来做到这一点。将参数作为参数传递给对象和方法名称(作为字符串),然后调用该方法。例如:Object&nbsp;methodCaller(Object&nbsp;theObject,&nbsp;String&nbsp;methodName)&nbsp;{ &nbsp;&nbsp;&nbsp;return&nbsp;theObject.getClass().getMethod(methodName).invoke(theObject); &nbsp;&nbsp;&nbsp;//&nbsp;Catch&nbsp;the&nbsp;exceptions}然后使用它,如:String&nbsp;theDescription&nbsp;=&nbsp;methodCaller(object1,&nbsp;"toString");Class&nbsp;theClass&nbsp;=&nbsp;methodCaller(object2,&nbsp;"getClass");当然,检查所有异常并添加所需的强制转换。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java