如何使用 GuavaOptional 作为“自然协变对象”
新的 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);
为了转换< code>CollectionCollection
而不为每个对象创建新对象?
我认为即使是返回的Function对象也可能是通过内部单例来实现的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尽管强制转换实际上比您想象的更丑:
...我们仍然认为这正是您应该做的,并且排除了提供您所要求的方法。
虽然有点麻烦,但没关系,因为您应该很少需要做这样的事情,只要您在 API 签名中正确使用通配符,如 Effective Java 中所述。< /em>
Even though casting is actually even uglier than you think:
... we still think it is exactly what you should do, and have ruled out providing a method like you ask for.
It's okay that it's a little cumbersome because you should very rarely need to do a thing like this, so long as you are using wildcards correctly in your API signatures, as covered in Effective Java.
通过指定
of
方法的类型,您可以完全避免强制转换:By specifying the type of the
of
method, you can avoid the cast entirely: