快捷搜索:  汽车  科技

java什么是空指针(java新特性之Optional类介绍)

java什么是空指针(java新特性之Optional类介绍)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)); } /** *

Optional类作用

Optional类被final修饰,是没有子类的工具类。主要作用就是为了避免null检查,防止空指针异常的作用。

以前对null的处理

对于字符串,传统的空指针问题解决方案:

String name = null; if (name != null) { System.out.println(name.length()); } else{ System.out.println("字符串为空!"); }

这样的写法显得很呆![吐舌]

创建方式Optional.of(T value)

Optional.of方法创建的Optional对象,不能传入null值

// 通过of方法,of方法不支持null Optional<String> op1 = Optional.of("zhangsan"); // NullPointerException Optional<Object> op2 = Optional.of(null);

null值会报空指针异常,原因是调用了Objects.requireNonNull(value)

public static <T> T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; }创建方式Optional.ofNullable(T value)

Optional.of方法创建的Optional对象,支持传入null值

// 通过ofNullable方法,支持传入null Optional<String> op1 = Optional.ofNullable("zhangsan"); Optional<Object> op2 = Optional.ofNullable(null);

支持传入null值原因:

public static <T> Optional<T> ofNullable(T value) { return value == null ? empty() : of(value); }Optional类解决空指针方案

传入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(""); } }

java什么是空指针(java新特性之Optional类介绍)(1)

执行效果图

字符串空值处理:

String str = null; System.out.println(Optional.ofNullable(str).orElse(""));

猜您喜欢: