我对Java 8 Optionals有疑问。
下面的代码给出了编译错误:
Integer number = Optional.ofNullable(new Integer(10));
但是,当我们执行以下操作时,它会不,我不知道它是如何工作的:
Integer number = Optional.ofNullable(new Integer(10)).orElse(10);
如果我们查看Optional.ofNullable()
的文档,它返回类型为static <T> Optional<T> ofNullable(T value)
的对象,表示它是内部类型转换,但文档说它的返回类型为Optional
。
我知道.orElse
方法的返回类型为T
,如果它进入orElse
条件,即如果传入的对象,则可以正常工作。是null
,但如果不为null,它将如何进行类型转换?
答案 0 :(得分:6)
看看方法的声明,
public static <T> Optional<T> ofNullable(T value)
因此,它花费T并返回Optional<T>
,因此,在您的情况下,它花费Integer
并返回Optional<Integer>
所以当您这样做时,
Optional.ofNullable(new Integer(10)).orElse(10);
orElse
调用将取消包装可选内容,如果不为空,则返回其中的值。否则,它只会返回给定值。
更新
根据以下注释,您可以在将工作留给自动装箱的同时进一步简化它。
Optional.ofNullable(10).orElse(10);
答案 1 :(得分:1)
正确的方法是
Optional<Integer> numberOpt = Optional.ofNullable(new Integer(10));
答案 2 :(得分:0)
Integer number = Optional.ofNullable(new Integer(10));
使用此方法,您尝试将Optional<Integer
>放在Integer
上。显然是不允许的。
完成时
Integer number = Optional.ofNullable(new Integer(10)).orElse(10);
在调用Optional<Integer>.orElse
时,由于未使用Optional<Integer>.get
,因此会返回Integer
。所以没有错误。
答案 3 :(得分:0)
我知道.orElse方法的返回类型为T,可以正常工作 如果它进入orElse条件,即如果传入的对象是 null,但是如果不为null,它将如何进行类型转换?
Optional.ofNullable()将返回Optional对象,该对象将把我们作为参数传递的实际值保存到名为value的实例变量中。
orElse(其他)-返回值(如果存在),否则返回作为参数传递的对象。 Java 8可选类中的orElse()方法的内部。
extension Swift.Optional where Wrapped == String {
var isBlank: Bool {
return self?.isBlank ?? true
}
}
orElse采用泛型参数,并且隐式执行类型转换。如果其不为null,则orElse将返回该值,否则返回作为参数传递的另一个值。