Generics 如何使用番石榴作为“可选”;“自然协变对象”;
新的番石榴有10个自然协变状态,因此可以铸造 如果我试着让它看起来有点难看:Generics 如何使用番石榴作为“可选”;“自然协变对象”;,generics,guava,covariance,Generics,Guava,Covariance,新的番石榴有10个自然协变状态,因此可以铸造 如果我试着让它看起来有点难看: Optional<Integer> opti = Optional.of(42); Optional<Number> optn = (Optional) opti; opti=Optional.of(42); 可选optn=(可选)opti; 我喜欢看到一些实用功能,如: static <T> Optional<T> transform(Optional<?
Optional<Integer> opti = Optional.of(42);
Optional<Number> optn = (Optional) opti;
opti=Optional.of(42);
可选optn=(可选)opti;
我喜欢看到一些实用功能,如:
static <T> Optional<T> transform(Optional<? extends T> opt, Class<T> clazz);
静态可选变换(可选,尽管施法实际上比你想象的还要难看:
Optional<Integer> opti = Optional.of(42);
@SuppressWarnings("unchecked") // safe covariant cast
Optional<Number> optn = (Optional) opti;
opti=Optional.of(42);
@SuppressWarnings(“未选中”)//安全协变强制转换
可选optn=(可选)opti;
…我们仍然认为这正是您应该做的,并且排除了提供您要求的方法的可能性
这有点麻烦也没关系,因为您应该很少需要做这样的事情,只要您在API签名中正确使用通配符,正如有效Java中所述。通过指定方法的类型,您可以完全避免强制转换:
Optional<Number> optx = Optional.<Number>of(42);
Optional optx=Optional.of(42);
不需要丑陋类型参数:可选。of((Number)42);
Optional<Number> optx = Optional.<Number>of(42);