Optional类被final修饰,是没有子类的工具类。主要作用就是为了避免null检查,防止空指针异常的作用。
对于字符串,传统的空指针问题解决方案:
String name = null;
if (name != null) {
System.out.println(name.length());
} else{
System.out.println("字符串为空!");
}
这样的写法显得很呆![吐舌]
Optional.of方法创建的Optional对象,不能传入null值。
// 通过of方法,of方法不支持null
Optional op1 = Optional.of("zhangsan");
// NullPointerException
Optional
null值会报空指针异常,原因是调用了Objects.requireNonNull(value)。
public static T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
Optional.of方法创建的Optional对象,支持传入null值。
// 通过ofNullable方法,支持传入null
Optional op1 = Optional.ofNullable("zhangsan");
Optional
支持传入null值原因:
public static Optional ofNullable(T value) {
return value == null ? empty() : of(value);
}
传入User对象,获取userName属性值,有值把值转大写返回,无值返回空字符串。
public class Test {
public static void main(String[] args) {
User user1 = new User();
user1.setUserName("张三");
User user2 = new User();
User user3 = null;
System.out.println("user1 " + test(user1));
System.out.println("user2 " + test(user2));
System.out.println("user3 " + test(user3));
}
/**
* 传入User对象,获取userName属性值,
* 有值把值转大写返回,
* 无值返回空字符串。
*/
public static String test(User user) {
return Optional.ofNullable(user)
.map(User::getUserName)
.map(String::toUpperCase)
.orElse("");
}
}
执行效果图
字符串空值处理:
String str = null;
System.out.println(Optional.ofNullable(str).orElse(""));
留言与评论(共有 0 条评论) “” |