個人認為在自己寫接口時,需要返回集合時返回一個空集合,比如mybatis查詢如果返回一個集合,結果為空時也會返回一個空集合而不是null。
那么這樣有什么好處呢?最大的好處就是調用方不用在判斷是否為null,可以直接用,因為不用拋空指針。
當然這也有缺點,如果返回Lists.newArrayList();或者new ArrayList();這會新建一個對象,而這個對象很可能是沒必要的,這樣白白浪費性能。
解決方法當然也有,可以用Collections.emptyList();這個方法返回一個空集合,並不會新建對象,而是返回
public static final List EMPTY_LIST = new EmptyList<>();
這個變量。
當然這也有缺點,如果調用方只是遍歷,這沒什么不會報錯,但是如果要新增,刪除里面的元素那就會報錯,
那么你可能想為什么,原因就是代碼里直接寫死了調用時報錯,那么為什么要這樣寫呢?
原因也很簡單,如果多個線程對這個集合增刪,那么調用方就全亂了,所以采用了直接報錯,快速失敗的方法
來解決問題。
總結:
返回null,返回new ArrayList<>(),返回EMPTY_LIST 。
null肯定是不推薦的,那么是新建一個List還是返回空List呢?
這要根據接口的性能要求,如果性能要求高返回EMPTY_LIST,否則新建一個對象。