泛型方法返回“无”但不能返回null时返回什么?

马克·耶罗尼姆斯(Mark Jeronimus):

假设我有一个这样的库方法(非常缩写):

public static <V> Optional<V> doSomethingWith(Callable<V> callable) {
    try {
        return Optional.of(callable.call());
    } catch (Exception ex) {
        // Do something with ex
        return Optional.empty();
    }
}

我想要一种不返回值的东西,例如:

    Library.</*What1*/>doSomethingWith(() -> {
        foo();
        return /*what2*/;
    });

我对不返回值的泛型方法的第一个直觉是创建类型Void并返回null,但是由于将结果包装在中,Optional这将引发异常。

什么是合理的占位符,/*What1*/并且/*what2*/看起来不像Integer完全随机0

[edit]我试图避免,Optional.ofNullable因为此处使用空表示callable.call()未正常完成。

构造函数:

我通常用Boolean.TRUE标记成功来表示,但是您也可以返回Void.class从并非每次返回都会创建要丢弃的新对象的意义上来说,两者都是廉价的。尽管Class<Void>不仅如此,Void它也可以用于标记某些东西的目的void

如前所述,您还可以创建自己的Result-class / -enum。

或者,您当然也可以返回Optional.<Void>nothing()这会导致一些问题Optional<Optional<Void>>,但也能解决问题。

如果您认为以上所有内容都很丑陋,我担心该API可能不适用于您的需求。提出问题/拉动请求或寻找其他东西。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章