Java8之使用Optional进行Null处理

国内新闻 阅读(1189)
71e2f2ab8e5e4fa99c691a727cd80e75

可选类这是Java 8中的一个新类,用于解决程序中常见的NullPointerException异常。本文将详细介绍Optional类以及如何使用它来消除代码中的空检查。

1.创建optional对象

empty()方法用于创建一个没有值的Optional对象:

可选emptyOpt=Optional.empty();

of()方法创建一个具有非空值的Optional对象:

String str='Hello World';可选notNullOpt=Optional.of(str);

ofNullable()方法接收一个可以为null的值:

可选nullableOpt=Optional.ofNullable(str);

2.判断Null

isPresent()

如果创建的对象没有值,则调用isPresent()方法将返回false,并且调用get()方法将抛出NullPointerException。

3.获取对象

得到()

4.使用map提取对象的值

如果我们想在User对象中获取roleId属性的值,通常的方法是直接获取它:

String roleId=null; if(user!=null){roleId=user.getRoleId();}

Optional中提供的map()方法可以更简单的方式实现:

可选userOpt=Optional.ofNullable(user);可选roleIdOpt=userOpt.map(用户: getRoleId);

5.使用orElse方法设置默认值

Optional类还包含其他获取值的方法。这些方法是:

orElse():返回是否有值,否则返回给定值作为默认值; orElseGet():与orElse()方法类似,但默认值的生成方式不同。此方法接受Supplier函数接口参数以生成默认值; orElseThrow():类似于前面描述的get()方法,当值为null时,调用这两个方法都会抛出一个NullPointerException,区别在于该方法可以指定抛出的异常类型。 String str='Hello World';可选strOpt=Optional.of(str); String orElseResult=strOpt.orElse('Hello Shanghai'); String orElseGet=strOpt.orElseGet(() - >'Hello Shanghai'); String orElseThrow=strOpt.orElseThrow(() - > new IllegalArgumentException('Argument'str'不能为null或空白。'));

6.使用filter()方法过滤

可选optional=Optional.of(''); optional=optional.filter(str - > str.contains('164'));

在上面的代码中,如果filter()方法中的Lambda表达式为true,则filter()方法将返回当前的Optional对象值,否则它将返回一个具有空值的Optional对象。

7.使用建议

尽量避免直接在程序中调用Optional对象的get()和isPresent()方法;避免使用Optional类型来声明实体类的属性;

8.正确示例

orElse()方法的使用

返回str!=null? str:'Hello World'

上面的代码表示字符串str是否为空,如果它不为空则返回。否则,它返回一个常量。使用Optional类可以表示为:

返回strOpt.orElse('Hello World')

简化if-else

User user=. if(user!=null){String userName=user.getUserName(); if(userName!=null){return userName.toUpperCase(); } else {return null; }} else {return null;}

上面的代码可以简化为:

User user=.可选userOpt=Optional.ofNullable(user); return user.map(User: getUserName).map(String: toUpperCase).orElse(null);原文地址:作者:薛勤

http://www.sugys.com/bdseZpJ/qTllx.html