如何在不使用 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);
}
我有一个函数 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);
}