为了账号安全,请及时绑定邮箱和手机立即绑定

Java中的函数指针

Java中的函数指针

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

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

类似于函数指针的功能的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);


查看完整回答
反对 回复 2019-08-16
?
慕少森

TA贡献2019条经验 获得超9个赞

您可以使用接口替换函数指针。假设你想要运行一个集合并对每个元素做一些事情。

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++;
    }});


查看完整回答
反对 回复 2019-08-16
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

你可以使用反射来做到这一点。

将参数作为参数传递给对象和方法名称(作为字符串),然后调用该方法。例如:

Object methodCaller(Object theObject, String methodName) {
   return theObject.getClass().getMethod(methodName).invoke(theObject);
   // Catch the exceptions}

然后使用它,如:

String theDescription = methodCaller(object1, "toString");Class theClass = methodCaller(object2, "getClass");

当然,检查所有异常并添加所需的强制转换。


查看完整回答
反对 回复 2019-08-16
  • 3 回答
  • 0 关注
  • 945 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信