Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回void并传递布尔参数的函数接口_Java_Functional Interface - Fatal编程技术网

Java 返回void并传递布尔参数的函数接口

Java 返回void并传递布尔参数的函数接口,java,functional-interface,Java,Functional Interface,我正在使一个方法在另一个线程中执行,因为它可能需要时间。但是,我想通知调用方,操作将完成,如果成功。为此,我需要一个不返回任何内容(我不需要回调结果)并传递布尔值的函数接口 示例代码: public boolean send(Command command) { try { //long stuff return true; } catch(Exception ex) { //logging error return

我正在使一个方法在另一个线程中执行,因为它可能需要时间。但是,我想通知调用方,操作将完成,如果成功。为此,我需要一个不返回任何内容(我不需要回调结果)并传递布尔值的函数接口

示例代码:

public boolean send(Command command) {
    try {
        //long stuff
        return true;
    } catch(Exception ex) {
        //logging error
        return false;
    }
}

public void sendAsync(Command command, MyCallback callback) {
    new Thread(() -> {
        boolean successful = send(command);
        if(callback != null)
            callback.call(successful);
    }).start();
}
比如:

void call(boolean successful);
它已经存在于Java中,还是我必须自己创建一个?

方法
void调用(布尔成功)
可以表示为
void-accept(布尔b)
,它内置于Java中。这将允许您避免创建自己的功能接口

因此:

public void sendAsync(Command command, Consumer<Boolean> callback) {
    new Thread(() -> {
        boolean successful = send(command);
        if(callback != null)
            callback.accept(successful);
    }).start();
}
public void sendsync(命令,使用者回调){
新线程(()->{
布尔成功=发送(命令);
if(回调!=null)
callback.accept(成功);
}).start();
}
方法
void调用(布尔成功)
可以用内置于java中的as
void accept(布尔b)
表示。这将允许您避免创建自己的功能接口

因此:

public void sendAsync(Command command, Consumer<Boolean> callback) {
    new Thread(() -> {
        boolean successful = send(command);
        if(callback != null)
            callback.accept(successful);
    }).start();
}
public void sendsync(命令,使用者回调){
新线程(()->{
布尔成功=发送(命令);
if(回调!=null)
callback.accept(成功);
}).start();
}

如果返回void,您如何知道该操作成功?@JakeMiller功能接口没有执行该操作,它只是报告该操作是否成功并在实际操作之后执行。是什么阻止您自己定义该操作?如果你不需要结果,那么为什么你有一个参数?@cricket\u 007来提高清晰度。我不喜欢重新创建Java标准库中可用的对象。我还提供了一个示例代码来解释。我知道你要问的问题存在于RxJava中,但是
可调用的
是在Java8标准库中最接近的。如果它返回void,你怎么知道该操作是成功的?@JakeMiller函数接口没有执行该操作,它只是报告操作是否成功,并且在实际操作之后执行。是什么阻止您自己定义此操作?如果你不需要结果,那么为什么你有一个参数?@cricket\u 007来提高清晰度。我不喜欢重新创建Java标准库中可用的对象。我还提供了一个示例代码来解释。我知道您要问的问题存在于RxJava中,但是
可调用的
是最接近Java8标准库的