22Sep2020[Bug記錄]
什么是String...
String…是java5新加入的功能,表示的是一個可變長度的參數(shù)列表
其語法就是類型后跟…,表示此處接受的參數(shù)為0到多個Object類型的對象,或者是一個Object[]。 例如我們有一個方法叫做listsome(String…strings),那么你還可以寫方法listsome(),但你不能寫listsome(String[] strings),這樣會出編譯錯誤,系統(tǒng)提示出現(xiàn)重復的方法。
在使用的時候,對于listsome(String…strings),你可以直接用listsome()去調(diào)用,標示沒有參數(shù),也可以用去listsome(“aaa”),也可以用listsome(new String[]{“aaa”,”bbb”})。
另外如果既有l(wèi)istsome(String…strings)函數(shù),又有l(wèi)istsome()函數(shù),我們在調(diào)用listsome()時,會優(yōu)先使用listsome()函數(shù)。只有當沒有l(wèi)istsome()函數(shù)式,我們調(diào)用test(),程序才會走test(String…strings)
出現(xiàn)場景
public static void initPage(Integer pageIndex, Integer pageLimit, String... sortKeys) {
Assert.notNull(pageIndex, "分頁查詢,參數(shù)pageIndex不能為Null!");
Assert.notNull(pageLimit, "分頁查詢,參數(shù)pageLimit不能為Null!");
if (StringUtils.isEmpty(sortKeys)) {
PageHelper.startPage(pageIndex, pageLimit);
} else {
......
}
}
對于一個傳遞過來的可變參數(shù)sortkey,我需要獲取到這個值中的內(nèi)容,但是由于允許這個值允許為空,因此在傳遞過程中取值過程中如果僅僅是簡單的使用Spring中自帶的String判空包有可能會拋出一個比較詭異的空指針異常,因此需要對其進行判空操作,而對于StringUtils.isEmpty()函數(shù)來說不能夠攔截到sortkey為空的情況
所在的Jar包org.springframework.util
/**
* Check whether the given {@code String} is empty.
* <p>This method accepts any Object as an argument, comparing it to
* {@code null} and the empty String. As a consequence, this method
* will never return {@code true} for a non-null non-String object.
* <p>The Object signature is useful for general attribute handling code
* that commonly deals with Strings but generally has to iterate over
* Objects since attributes may e.g. be primitive value objects as well.
* @param str the candidate String
* @since 3.2.1
*/
public static boolean isEmpty(Object str) {
return (str == null || "".equals(str));
}
判空失敗
解決辦法
if (StringUtils.isEmpty(sortKeys)) {
PageHelper.startPage(pageIndex, pageLimit);
} else {
//工具包無法捕獲到sortKey為空的時候
String sort = "";
if (null==sortKeys[0]){
PageHelper.startPage(pageIndex, pageLimit);
} else{
sort = sortKeys[0];
}
解決完成,特此記錄防止重復踩坑