天天看點

新特性Optional的使用,以及集合長度為0的踩坑

使用Java8的新特性Optional,再取屬性的時候避免NullPointException,代替判空操作

代替

if(user!=null){
	return user.getName();
}else{
	return null;
}
           

提高代碼的可讀性

可以追溯一下Optional的map方法的源碼

新特性Optional的使用,以及集合長度為0的踩坑

如果目前Optional對象沒有值,傳回一個empty(),繼續追溯empty()源碼的話,其實他就是new一個Optional()

其實Optional的源碼還是挺好讀懂的,關于ofNullable()、orElse()、get()、of()等方法都可以自己去看看,一看便會

踩坑

List<Employee> employees = helloMapper.selectByExample(example);
// 利用JDK8新特性簡化判空操作(不可用,這裡集合不是null,是長度為0)
return Optional.ofNullable(employees).map(list -> list.get(0)).orElse(null);
           

這裡如果查詢資料庫沒有值的話,會報錯,下标越界異常

因為查詢資料庫沒有值的話,傳回的集合是空集合,長度為0,而不是一個null

也就是在map方法中

if (!isPresent())
         return empty();
           

并不滿足這個,繼續執行就會發現集合越界了

這是今天踩的坑,記住查詢資料庫沒有結果,

集合:傳回的是空集合,并不是null