use*_*861 3 java optional java-8
我对Java 8 Optionals有疑问.
以下代码给出了编译错误:
Integer number = Optional.ofNullable(new Integer(10));
Run Code Online (Sandbox Code Playgroud)
但是,当我们做以下它不,我不明白这是怎么工作:
Integer number = Optional.ofNullable(new Integer(10)).orElse(10);
Run Code Online (Sandbox Code Playgroud)
如果我们查看文档Optional.ofNullable(),它会返回一个类型的对象static <T> Optional<T> ofNullable(T value),表示它是内部类型转换,但文档说它的返回类型是Optional.
我得到的.orElse方法返回类型T,如果它进入orElse条件,它将工作正常,即如果传入的对象是null,但如果它不是null它是如何对它进行类型转换?
看一下方法的声明,
public static <T> Optional<T> ofNullable(T value)
Run Code Online (Sandbox Code Playgroud)
所以这需要T并返回Optional<T>所以在你的情况下它需要Integer并返回一个Optional<Integer>
所以当你这样做的时候
Optional.ofNullable(new Integer(10)).orElse(10);
Run Code Online (Sandbox Code Playgroud)
该orElse调用将解包该可选项并返回其中的值(如果它不为空).否则它只返回给定的值.
更新
根据以下注释,您可以在将作业留给Autoboxing的同时进一步简化它.
Optional.ofNullable(10).orElse(10);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
656 次 |
| 最近记录: |