首页 > 解决方案 > 如何将特定类中的非静态方法作为参数传递给函数

问题描述

这将是 C++ 中的等价物,所有我想传递非静态函数和 Foo 的方法:

class Foo
{
public:
  double method1 ()
  {
    return 1.0;
  }
  unsigned char method2 ()
  {
    return 2;
  }
};

template <typename T> 
T myMethod (T (*methodFromFoo) (void))
{
  return methodFromFoo ();
}

myMethod 的返回类型必须是通用的,因为我想要包装不同返回类型的方法。java 11 中的语法是什么?

标签: javamethodsparameters

解决方案


这在 java 中由功能接口处理。由于您的方法不带参数并返回一个值,因此等效的 java 语法是Supplier<T>.

因此,生成的方法将是:

public <T> static T myMethod(final Supplier<T> supplier) {
    return supplier.get();
}

并通过传入适当的Supplier<T>. 例如:

public void invokeWithInlineLambda() {
    final int result = myMethod(() -> 10); // result = 10
}

public void invokeFromMethod() {
    final String result = myMethod(this::getResult); // result = "Meow"
}


private String getResult() {
    return "Meow";
}

推荐阅读