X Tutup
# Java8 Optional类 - Java8教程 Optional用于包含非空对象的容器对象。Optional对象,用于表示使用不存在null值。这个类有各种实用的方法,以方便代码来处理为可用或不可用,而不是检查null值。它是Java引入, 是类似于在 [Guava](http://www.yiibai.com/guava/index.html) 中的 [Optional](http://www.yiibai.com/guava/guava_optional_class.html) 。 ## 类声明 以下是java.util.Optional<T>类的声明: ``` public final class Optional extends Object ``` ## 类方法 | S.N. | 方法及说明 | | --- | --- | | 1 | **static <T> Optional<T> empty()** 返回一个空的 Optional 实例。 | | 2 | **boolean equals(Object obj)** 表示某个其他对象是否“等于”此Optional。 | | 3 | **Optional<T> filter(Predicate<? super T> predicate) ** 如果值存在,并且该值给定的谓词匹配,返回一个可选描述值,否则返回一个空Optional。 | | 4 | **<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)** 如果值存在,应用提供的可选承载映射功能到它,返回结果,否则返回一个空Optional。 | | 5 | **T get()** 如果值是出现在这个 Optional 中,返回这个值,否则抛出NoSuchElementException异常。 | | 6 | **int hashCode()** 返回当前值,哈希码值(如有)或0(零),如果值不存在。 | | 7 | **void ifPresent(Consumer<? super T> consumer)** 如果值存在,调用指定的使用方提供值,否则什么都不做。 | | 8 | **boolean isPresent()** 返回true,如果有一个值存在,否则为false。 | | 9 | **<U> Optional<U> map(Function<? super T,? extends U> mapper)** 如果值存在,应用提供的映射函数,如果结果非空,返回一个Optional描述结果。 | | 10 | **static <T> Optional<T> of(T value)** 返回一个Optional具有指定当前非空值。 | | 11 | **static <T> Optional<T> ofNullable(T value)** 返回一个Optional描述指定的值,如果非空,否则返回一个空的Optional。 | | 12 | **T orElse(T other)** 返回值(如果存在),否则返回other。 | | 13 | **T orElseGet(Supplier<? extends T> other)** 如果存在,返回值,否则调用其他并返回调用的结果。 | | 14 | **<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)** 返回所含值,如果存在的话,否则抛出将由提供者创建的一个例外。 | | 15 | **String toString()** 返回此Optional适合调试一个非空字符串表示。 | ## 方法继承 这个类从以下类继承的方法: * java.lang.Object ## Optional 例子 选择使用任何编辑器创建以下java程序在 C:/> JAVA _Java8Tester.java_ ``` import java.util.Optional; public class Java8Tester { public static void main(String args[]){ Java8Tester java8Tester = new Java8Tester(); Integer value1 = null; Integer value2 = new Integer(10); //Optional.ofNullable - allows passed parameter to be null. Optional a = Optional.ofNullable(value1); //Optional.of - throws NullPointerException if passed parameter is null Optional b = Optional.of(value2); System.out.println(java8Tester.sum(a,b)); } public Integer sum(Optional a, Optional b){ //Optional.isPresent - checks the value is present or not System.out.println("First parameter is present: " + a.isPresent()); System.out.println("Second parameter is present: " + b.isPresent()); //Optional.orElse - returns the value if present otherwise returns //the default value passed. Integer value1 = a.orElse(new Integer(0)); //Optional.get - gets the value, value should be present Integer value2 = b.get(); return value1 + value2; } } ``` ## 验证结果 使用javac编译器编译如下类 ``` C:\JAVA>javac Java8Tester.java ``` 现在运行Java8Tester看到的结果 ``` C:\JAVA>java Java8Tester ``` 看到结果。 ``` First parameter is present: false Second parameter is present: true 10 ```
X Tutup