java - 如何将特定类中的非静态方法作为参数传递给函数
问题描述
这将是 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 中的语法是什么?
解决方案
这在 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";
}
推荐阅读
- sql-server - 计算几乎相等期间的开始日期
- r - 当 UI 中没有选择任何内容时,反应性 ggplot 工具提示错误,
- python - print(..., end=' ') 立即输出
- raspberry-pi4 - 使用树莓派 4 的 DHT22 问题
- python - 如何每次都验证 Tkinter 中的条目是否具有唯一值
- python - 我有这个错误,我不知道该怎么办
- python - 如何修复 RuntimeWarning:启用 tracemalloc 以获取对象分配回溯错误
- show - 如何下载虚拟机以在 32 位计算机上安装 64 位程序?
- c# - 从源“http://**”访问“https://saja.smjd.ir/api/Account/login”处的 XMLHttpRequest 已被 CORS 策略阻止
- arrays - 如何在数组上进行scala模式匹配?