JDK1.8 Optional 源码剖析
程序员文章站
2021-12-25 10:56:38
...
Optional
容器对象,可能包含也可能不包含非null值。如果存在值,{@ code isPresent()}将返回{@code true}并且{@code get()}将返回该值。
提供依赖于是否存在包含值的其他方法,例如{@link #orElse(java.lang.Object)orElse()}(如果值不存在则返回默认值)和{@link #ifPresent (java.util.function.Consumer)ifPresent()}(如果值存在则执行代码块)。
of
返回具有指定的当前非空值的{@code Optional}。
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
私有的构造函数
private Optional(T value) {
this.value = Objects.requireNonNull(value);
}
Objects. requireNonNull 如果为空则会报空指针
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
ofNullAble
返回描述指定值的{@code Optional},如果为非null,否则返回空{@code Optional}。
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
orElse
如果值存在则返回,否则则返回other
public T orElse(T other) {
return value != null ? value : other;
}
eg:
public class OptionTest {
public static void main(String[] args) {
String userId = null;
//String userName = getUserName(null);
//System.out.println(userName);
String userAge = getUserAge(userId);
System.out.println(userAge);
}
public static String getUserName(String userId){
return Optional.ofNullable(userId).orElse("zhuxiaolei");
}
public static String getUserAge(String userId){
return Optional.of(userId).get();
}
}