如何在不使用 Either 的情况下在 java 中执行此操作?

How can I do this in java without using Either?

我有一个函数 returns String.

private String processQuery(String[] args){
    //code logic
}

返回的结果可以是答案 (Your account detail is $account_detail.) 或响应 (Sorry I cannot understand you?)。根据结果​​,代码将做不同的事情。 我想到的是用户 Either<String, String>.

private Either<String,String> processQuery(String[] args){
    //code logic
}

private void reply(String[] args){
    //code logic
    var either = processQuery(args);
    return either.fold((l){
       //returned result is answer

    },(r){
       //returned result is response

    });
}

如果 returns 左边就是答案,如果 returns 右边就是响应。但是由于 java 中没有 Either 类型,所以我尝试传递 AtomicBoolean。

仅使用 java stl 有什么更好的解决方案?

您可以使用 Pair:

Pair<String, String> pair = Pair.with("Blah", "Blee");

看一些例子here

更好的方法是,如果您的 responses 实际上代表某种错误,则抛出某种异常,并保留 String 的 return 值代表一个“好的”流量。

一个解决方案是让该方法采用两个对应于正确答案和错误答案的 lambda 函数,然后仅调用适当的一个

private void processQuery(String[] args, Consumer<String> correct, Consumer<String> incorrect){
    if (args.length == 0) {
        incorrect.accept("Sorry I cannot understand you?");
        return;
    }

    correct.accept("Your account detail is $account_detail.");
}

可以这样调用

private void reply(String[] args){
    processQuery(args, (
        reply -> System.out.println("Success!, " + reply)
    ),
    (
        reply -> System.out.println("Fail, " + reply)
    )
    );
}

或为不同的函数创建变量

Consumer<String> badAnswer = reply -> System.out.println("Fail, " + reply);
Consumer<String> goodAnswer = reply -> System.out.println("Success!, " + reply);
private void reply(String[] args){
    processQuery(args, goodAnswer, badAnswer);
}