Optional类中of()和ofNullable()使用方法及区别说明
下文笔者讲述of()和ofNullable()方法的功能及区别说明,如下所示
ofNullable(T value)源码
of()和ofNullable()方法的功能说明
of(T value)的功能:
返回一个携带被指定的value
且该value不能为NULL
ofNullable(T value):
如果指定的value不为NULL
则返回携带有该value的Optional
of()和ofNullable()方法示例
public static void main(String[] args) {
try {
// value值不存在
String str = null;
Optional.of(str);
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) {
try {
// value值存在
String str = "hello java265.com";
String value = Optional.of(str).get();
System.out.println(value);
} catch (Exception e) {
System.out.println(e);
}
}
从以上的代码示例,我们可以得出以下结论
当value存在时
of(...)方法不会抛异常
当value不存在,就会抛出空指针异常。
ofNullable(T value)示例
value值不存在
public static void main(String[] args) {
try {
// value值不存在
String str = null;
Optional.ofNullable(str);
} catch (Exception e) {
System.out.println(e);
}
}
value值存在
public static void main(String[] args) {
try {
// value值存在
String str = "hello java265.com";
Optional.ofNullable(str);
} catch (Exception e) {
System.out.println(e);
}
}
无论value值是否存在
ofNullable(...)方法都不会抛出空指针异常
of()和ofNullable()方法源码分析
of(T value):
public final class Optional<T> {
private Optional(T value) {
this.value = Objects.requireNonNull(value);
}
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
}
//value值会由Object类的requireNonNull()方法处理
//requireNonNull源码解析
public final class Objects {
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
}
从源码中,我们可以得出抛出异常是由
requireNonNull方法造成
ofNullable(T value)源码
public final class Optional<T> {
// 实例化的一个value值为null的Optional类实例
private static final Optional<?> EMPTY = new Optional<>();
public static <T> Optional<T> ofNullable(T value) {
// 当value为null时,会调用empty(),返回一个value为null的Optional类实例,
// 若value不为null,就会调用of(..)方法,因为此时value值一定是存在的,所以即使
// 使用这个方法也是不会抛出空指针异常的。
return value == null ? empty() : of(value);
}
// 返回一个value为null的Optional类实例
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
}
of()和ofNullable()方法区别
从她们的源码和示例中,我们可以得出两者的区别
当传入的值为null时
of方法会抛出空指针异常,而ofNullable方法是不会抛出空指针异常
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


