【问题标题】:How to return Either a void or a String with vavr如何使用 vavr 返回 void 或 String
【发布时间】:2019-08-28 15:47:05
【问题描述】:

当某些条件不满足时,我有一个不返回任何内容 (void) 或字符串的函数。

我试试这行 Either.left(Void)

    private Either<Void,String> processOrReturnErrorMessage(){
        //Do something  and in some case return a message of failed conditions
        return Either.left(Void);
    }

【问题讨论】:

  • 当您不希望返回任何内容时,为什么不只返回一个空字符串?
  • 如果返回字符串的情况表明操作失败,为什么不抛出异常呢?这就是他们的目的
  • 我使用 vavr 来避免处理异常的功能案例。 @Nexevis你是对的,这可能是一种可能性。但事实是我想使用更结构化的方式,比如 result.isLeft(),甚至更多的 result.map
  • 值得一提的是,Either 不是 Java,它的 Scala 或其他一些库。
  • 库是标题和标签中提到的VAVR

标签: java vavr


【解决方案1】:

在 vavr 中有一个类型,叫做Option。如果没有错误可以返回Option.none(),如果有错误则返回Option.some(errorMessage)

如果您仍想使用Either,我建议您将左侧用于错误,将右侧用于值(happy 路径),因为Either右偏,所以mapflatMap 方法仅在Eitherright 值时才起作用。在您的情况下,由于没有要返回的值(即 void),您可以使用 Either&lt;String, Void&gt;,并在成功情况下返回 Either.right(null),因为 nullVoid 类型的唯一居民(null 是不幸的是,到目前为止,Java 中所有非原始类型的居民)。

或者您可以引入一个名为Unit 的新类型,其中只有一个居民(即单身人士),使用Either&lt;String, Unit&gt; 作为您的返回类型并返回Either.right(Unit.instance()) 表示缺少有意义的返回值并避免返回@987654336 @values,因为返回 null 值有点丑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 2014-03-19
    • 1970-01-01
    • 2015-09-23
    • 2020-08-23
    • 2023-03-24
    • 1970-01-01
    • 2021-10-09
    相关资源
    最近更新 更多