这个Optional类主要是解决空指针的问题
1.以前对null 的处理,获取用户名称
public static void main(String[] args) {
UserDto userDto1=new UserDto(1l,null);
UserDto userDto2=new UserDto(2l,"张三");
String name = getName(userDto2);
System.out.println(name);
}
/**
* 以前的获取用户名称
* @param userDto
* @return
*/
private static String getName(UserDto userDto){
if(userDto!=null){
return userDto.getUserName();
}
return "userDto为null";
}
2.创建一个Optional
private static void creatOptional(){
Optional<String> o1 = Optional.of("张");
//Optional.of不能使用null
// Optional<Object> o = Optional.of(null);
//Optional.ofNullable支持 null
Optional<String> o3 = Optional.ofNullable("张");
Optional<Object> o = Optional.ofNullable(null);
//创建一个空的Optional
Optional<Object> o2 = Optional.empty();
}
3.OptionalOptional的常用方法
public static void main(String[] args) {
Optional<String> op1 = Optional.of("张三");
Optional<String> op2 = Optional.empty();
//isPresent():判断是否包含值,包含值返回true,不包含值返回false
if(op1.isPresent()){
// get(): 如果Optional有值则返回,否则抛出NoSuchElementException异常
String s1 = op1.get();
System.out.println("用户名称:" +s1);
}
if(op2.isPresent()){
System.out.println(op2.get());
}else{
System.out.println("op2是一个空Optional对象");
}
//orElse(T t):如果调用对象包含值,就返回该值,否则返回t
String s3 = op1.orElse("李四");
System.out.println(s3);
String s4 = op2.orElse("王五");
System.out.println(s4);
//orElseGet(Supplier s):如果调用对象包含值,就返回该值,否则返回 Lambda表达式的返 回值
String s5 = op2.orElseGet(()->{ return "Hello"; });
System.out.println(s5);
//ifPresent(Consumer consumer):如果存在值,就xxx
op1.ifPresent(s -> System.out.println("当前对象存在值:"+s+"---"));
}
控制台输出:
用户名称:张三
op2是一个空Optional对象
张三
王五
Hello
当前对象存在值:张三—
4.Optional对null 的处理,获取用户名称
public static void main(String[] args) {
UserDto userDto=new UserDto(null,null);
UserDto userDto1=new UserDto(1l,null);
UserDto userDto2=new UserDto(2l,"张三");
String userName = getUserName(userDto);
String userName1 = getUserName(userDto1);
String userName2 = getUserName(userDto2);
System.out.println("userName:"+userName +" userName1:"+userName1+" userName2:"+userName2);
}
private static String getUserName(UserDto userDto){
Optional<UserDto> op=Optional.of(userDto);
return op.orElse(null).getUserName();
// if(op.isPresent()){
// return op.get().getUserName();
// }
// return null;
}
控制台输出:
userName:null userName1:null userName2:张三