如何在 Java 中将函数作为参数传递给 Callable

How to pass a function as parameter to Callable in Java

我有一个函数可以对我不想更改的数据库进行一些服务调用。但是如果有多个请求需要运行这个函数,我想在线程池中运行它们。所以,我想弄清楚如何将此函数包装在 Callable class 中。这是函数的签名:

void invokeCommand(string table, int ctype)

函数 invokeCommand 没有 return 任何值,但可以抛出异常。我想使用以下构造不是一个选项,因为我无法将参数和 invokeCommand 函数传递给它。

Callable<Void> myCommand = new Callable<Void>() {
    public Void call() {
        ...
    }
}

我了解到另一种方法是定义一个命名的 class 而不是匿名的 class 并通过构造函数传递参数 (string, int)。有没有办法我也可以传递函数 invokeCommand?实现这一目标的推荐方法是什么?提前致谢。

匿名 classes 可以访问在它们之外声明的 final 变量。他们还可以访问封闭 class.

的成员变量
final String table = ...;
final int ctype = ...;
Callable<Void> myCommand = new Callable<Void>() {
    public Void call() {
        invokeCommand(table, ctype);
        return null;
    }
};

在 Java 8 中,这个限制被放宽了——变量不需要被声明 final,但它必须是 有效的 final。如果变量在声明后从未被赋值,则它实际上是最终变量。