gpt4 book ai didi

generics - 如何使用 Guava Optional 作为 "naturally covariant object"

转载 作者:行者123 更新时间:2023-12-04 21:54:03 24 4
gpt4 key购买 nike

新 Guava 10 Optional 状态是自然协变的,因此可以强制转换。

如果我尝试,它看起来有点难看:

Optional<Integer> opti = Optional.of(42);
Optional<Number> optn = (Optional) opti;

我喜欢看到一些实用函数,例如:
static <T> Optional<T> transform(Optional<? extends T> opt, Class<T> clazz);

(如何将其表示为 Optional 的成员函数?)

甚至可以定义一个转换函数对象,如:
static <T> Function<Optional<? extends T>, Optional<T>> 
transformer(Class<T> class);

为了转换一个 Collection<Optional<Double>>Collection<Optional<Number>>而不为每个创建新对象?

我认为即使是返回的 Function 对象也可以通过内部单例来实现。

最佳答案

即使类型转换实际上比你想象的还要丑陋:

Optional<Integer> opti = Optional.of(42);

@SuppressWarnings("unchecked") // safe covariant cast
Optional<Number> optn = (Optional) opti;

...我们仍然认为这正是您应该做的,并排除了提供您要求的方法。

这有点麻烦是可以的,因为您应该很少需要做这样的事情,只要您在 API 签名中正确使用通配符,如 Effective Java 中所述。

关于generics - 如何使用 Guava Optional 作为 "naturally covariant object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com