Java Optional 类
Java Optional 类
Java在JDK8中引入了一个新的Optional类。它是一个final类,用于处理Java应用程序中的NullPointerException。我们必须导入java.util包才能使用该类。Optional类提供了用于检查特定变量是否存在值的方法。
Java Optional 类的方法列表
| Methods | Description | 
|---|---|
| public static <T> Optional<T> empty() | It returns an empty Optional object. No value is present for this Optional. | 
| public static <T> Optional<T> of(T value) | It returns an Optional with the specified present non-null value. | 
| public static <T> Optional<T> ofNullable(T value) | It returns an Optional describing the specified value, if non-null, otherwise returns an empty Optional. | 
| public T get() | If a value is present in this Optional, returns the value, otherwise throws NoSuchElementException. | 
| public boolean isPresent() | It returns true if there is a value present, otherwise false. | 
| public void ifPresent(Consumer<? super T> consumer) | If a value is present, invoke the specified consumer with the value, otherwise do nothing. | 
| public Optional<T> filter(Predicate<? super T> predicate) | If a value is present, and the value matches the given predicate, return an Optional describing the value, otherwise return an empty Optional. | 
| public <U> Optional<U> map(Function<? super T,? extends U> mapper) | If a value is present, apply the provided mapping function to it, and if the result is non-null, return an Optional describing the result. Otherwise return an empty Optional. | 
| public <U> Optional<U> flatMap(Function<? super T,Optional<U> mapper) | If a value is present, apply the provided Optional-bearing mapping function to it, return that result, otherwise return an empty Optional. | 
| public T orElse(T other) | It returns the value if present, otherwise returns other. | 
| public T orElseGet(Supplier<? extends T> other) | It returns the value if present, otherwise invoke other and return the result of that invocation. | 
| public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X extends Throwable | It returns the contained value, if present, otherwise throw an exception to be created by the provided supplier. | 
| public boolean equals(Object obj) | Indicates whether some other object is "equal to" this Optional or not. The other object is considered equal if: 
 | 
| public int hashCode() | It returns the hash code value of the present value, if any, or returns 0 (zero) if no value is present. | 
| public String toString() | It returns a non-empty string representation of this Optional suitable for debugging. The exact presentation format is unspecified and may vary between implementations and versions. | 
Java Optional类应用场景
在下面的示例中,我们没有使用可选类。此程序异常终止并引发nullPointerException。
public class Test
{
    public static void main(String[] args)
    {
        String[] str = new String[10];
        String lowercaseString = str[5].toLowerCase();
        System.out.print(lowercaseString);
    }
}
Exception in thread "main" java.lang.NullPointerException
    at Test.main(Test.java:8)应用场景1
import java.util.Optional;
public class Test
{
    public static void main(String[] args)
    {
        String[] str = new String[10];
        Optional<String> checkNull = Optional.ofNullable(str[5]);
        if (checkNull.isPresent())
        {
            String lowercaseString = str[5].toLowerCase();
            System.out.print(lowercaseString);
        }
        else
            System.out.println("string value is not present");
    }
}输出结果为:
string value is not present应用场景2
import java.util.Optional;
public class Test
{
    public static void main(String[] args)
    {
        String[] str = new String[10];
        str[5] = "JAVA OPTIONAL CLASS EXAMPLE";
        Optional<String> checkNull = Optional.ofNullable(str[5]);
        if (checkNull.isPresent())
        {
            String lowercaseString = str[5].toLowerCase();
            System.out.print(lowercaseString);
        }
        else
        {
            System.out.println("String value is not present");
        }
    }
}输出结果为:
java optional class example