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

问题描述

我有一个返回String的函数

Widget build(BuildContext context) {
        return StreamBuilder(
          stream: Firestore.instance.collection('shippingAddress').snapshots(),builder: (ctx,Snapshot) {
            if (chatSnapshot.connectionState == ConnectionState.waiting) {
              return Center(
                child: CircularProgressIndicator(),);
            }
    
            final shippingAddressDocs = Snapshot.data.documents;
            return ListView.builder(
                itemCount: shippingAddressDocs.length,itemBuilder: (ctx,index) => Text(
                      shippingAddressDocs [index]['alias'],));
          },);
      }
    }

返回的结果可以是答案private String processQuery(String[] args){ //code logic } 或响应(Your account detail is $account_detail.)。根据结果​​,代码将执行不同的操作。 我想出的是用户(Sorry I cannot understand you?)

Either<String,String>

如果返回左,则为答案;如果返回右,则为响应。但是,由于Java中没有任何一种类型,因此我尝试传递AtomicBoolean。

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

解决方法

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

count

可以这样称呼

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)
    )
    );
}
,

您可以使用Pair

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

查看示例here

如果您的responses实际上代表某种错误,一种更好的方法是抛出某种异常,并保持String的返回值代表“良好”流。