如何将“番石榴可选”用作“天然协变物体” [英] How to use Guava Optional as "naturally covariant object"

查看:93
本文介绍了如何将“番石榴可选”用作“天然协变物体”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

新的番石榴10 可选表示自然协变,因此可能被铸造。



如果我尝试这样看起来有点难看:

 可选<整数> opti = Optional.of(42); 
可选<数字> optn =(可选)opti;

我喜欢看到一些实用功能:

  static< T>可选< T> transform(可选的<?extends T> opt,Class< T> clazz); 

(如何将此表示为可选的成员函数?)

甚至有可能定义一个转换函数对象,例如:

  static< T>功能<可选< ;?延伸T>,可选< T>> 
变压器(Class< T> class);

为了变换集合<可选< Double>> 转换为集合<可选<数字>> ,而无需为每个对象创建新对象 $ b

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

通过指定<$ c $的类型c> 方法,您可以完全避免转换:

 可选< Number> optx =可选。(42)的< Number> 


The new Guava 10 Optional states to be naturally covariant and thus may be casted.

If I try so it looks a bit ugly:

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

I like to see some utility function like:

static <T> Optional<T> transform(Optional<? extends T> opt, Class<T> clazz);

(how to express this as a member function of Optional ?)

Is it even possible to define a transformation function object like:

static <T> Function<Optional<? extends T>, Optional<T>> 
transformer(Class<T> class);

in order to transform a Collection<Optional<Double>> into a Collection<Optional<Number>> without creating new objects for each?

I think even the returned Function object may be realized by an internal singleton.

解决方案

By specifying the type of the of method, you can avoid the cast entirely:

        Optional<Number> optx = Optional.<Number>of(42);

这篇关于如何将“番石榴可选”用作“天然协变物体”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆