如何 return void 或 String with vavr

How to return Either a void or a String with vavr

我有一个函数,当某些条件不满足时,它应该 return 什么都没有(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 中有一个类型,叫做 Option。没有错误可以returnOption.none(),有错误可以returnOption.some(errorMessage)

如果您仍想使用 Either,我建议使用左侧表示错误,使用右侧表示值(happy 路径),因为Either 右偏 ,因此 mapflatMap 方法仅在 Either 右时才作用于 Either 值。在您的情况下,由于 return 没有价值(即无效),您可以使用 Either<String, Void> 和 return Either.right(null) 作为成功案例,因为 null 是类型 Void 的唯一居民(null 是 Java 中所有非原始类型的居民,不幸的是,到目前为止)。

或者你可以引入一个名为 Unit 的新类型,只有一个居民(即单身人士),使用 Either<String, Unit> 作为你的 return 类型,return Either.right(Unit.instance()) 表示缺少有意义的 return 值并避免 returning null 值,因为 returning null 值有点难看。