泛型方法返回“无”但不能返回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 条评论
登录 后参与评论

相关文章

当用非泛型方法覆盖泛型方法时,为什么子签名和未经检查的规则在返回类型上以这种方式起作用?

当未指定泛型类型时,为什么不返回基本类型?

为什么javac认为在泛型类上进行泛型返回的调用方法不安全?

为什么有时在泛型方法的定义中省略了返回类型之前的尖括号

Java泛型:获取泛型方法的返回类型的类

Java-当返回类型对自己的方法参数类型使用泛型时,覆盖扩展接口的返回类型

Java泛型扩展方法的返回类型

泛型方法的返回类型也必须是泛型的吗?

获取继承的泛型方法的返回类型

返回Java泛型

如何使方法返回与输入相同的泛型?

从泛型类返回数组

在单个C#泛型方法中返回nullable和null?

返回泛型类型的泛型方法

为什么带有泛型返回的此方法不能正确使用泛型类型?

在C#中为泛型类型扩展返回null

Java方法返回的类的泛型类型

如何使用泛型从Scala方法返回

工厂返回泛型的实现

如何返回通配符泛型?

如何创建泛型方法以返回泛型类型

为泛型方法传递具体类型参数时,返回泛型IEnumerable

如何从方法返回泛型类?

覆盖方法时无法更改返回类型,使用泛型时错误

泛型作为方法返回类型

Java泛型返回类型

在Swift中,方法如何返回泛型?

使用泛型方法在接口上调用Type.GetRuntimeMethod会返回null

方法对象与泛型的返回类型?