1. 关于Java8工具类Optional的一点使用心得
对于Java开发中遇到的npe(空指针问题),其实使用工具类Optional处理效果一般,个人感觉最大的用处就是可以减少一定的if语句,减少一定的非空判断,千万不能将Optional放在if内,会非常多此一举。
个人觉得最实用的例子:
如果获取不到student的name属性(为空),那么将使用student的rename属性,即使rename、name为空,也不会出现空指针异常。
import lombok.Data;
import java.util.Optional;
public class qwe {
//java fhadmin.cn
public static void main(String[] args) {
Student student = new Student();
student.setReName("tom");
Student student1 = new Student();
student1.setName( Optional.ofNullable(student.getName()).orElseGet(student::getReName)); //
System.out.println(student1);
}
@Data
static class Student{
String name;
String reName;
}
}
2. 工具类
package com.ven.utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* java 8 Optional 工具类
* @author fhadmin
* @from fhadmin.cn
* @ version 1.0
*/
public class OptionalUtil {
/**
* 判断输入的字符串是否为空
* @param str String
* @return
*/
public static boolean isEmpty(String str){
return Optional.ofNullable(str).isPresent();
}
/**
* 判断输入的Integer是否为空
* @param num Integer
* @return
*/
public static boolean isEmpty(Integer num){
return Optional.ofNullable(num).isPresent();
}
/**
* 判断输入的Double是否为空
* @param dnum Double
* @return
*/
public static boolean isEmpty(Double dnum){
return Optional.ofNullable(dnum).isPresent();
}
/**
* 判断输入的Object是否为空
* @param obj
* @return
*/
public static boolean isEmpty(Object obj){
return Optional.ofNullable(obj).isPresent();
}
/**
* 判断输入的List是否为空,获取该对象
* @param obj
* @return
*/
public static Object get(Object obj){
return Optional.ofNullable(obj).isPresent()!=false?Optional.ofNullable(obj).get():null;
}
/**
* 测试
* @param args
*/
@SuppressWarnings("unchecked")
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
List<String> objList = (List<String>) OptionalUtil.get(list);
objList.forEach(item->{System.out.println(item);});
String str = null;
System.out.println("当前对象:"+OptionalUtil.get(str));
}
}