Spring Boot中自帶的這些工具類

1.斷言 Assert

斷言是一個邏輯判斷,用于檢查不應該發(fā)生的情況

Assert 關鍵字在 JDK1.4 中引入,可通過 JVM 參數(shù)-enableassertions開啟

SpringBoot 中提供了 Assert 斷言工具類蒋歌,通常用于數(shù)據(jù)合法性檢查

//?要求參數(shù)?object?必須為非空(Not?Null),否則拋出異常灾部,不予放行

//?參數(shù) message 參數(shù)用于定制異常信息。

void?notNull(Object?object,?String?message)

//?要求參數(shù)必須空(Null)惯退,否則拋出異常赌髓,不予『放行』。

//?和?notNull()?方法斷言規(guī)則相反

void?isNull(Object?object,?String?message)

//?要求參數(shù)必須為真(True),否則拋出異常锁蠕,不予『放行』夷野。

void?isTrue(boolean?expression,?String?message)

//?要求參數(shù)(List/Set)必須非空(Not?Empty),否則拋出異常荣倾,不予放行

void?notEmpty(Collection?collection,?String?message)

//?要求參數(shù)(String)必須有長度(即悯搔,Not?Empty),否則拋出異常舌仍,不予放行

void?hasLength(String?text,?String?message)

//?要求參數(shù)(String)必須有內(nèi)容(即妒貌,Not?Blank),否則拋出異常抡笼,不予放行

void?hasText(String?text,?String?message)

//?要求參數(shù)是指定類型的實例苏揣,否則拋出異常黄鳍,不予放行

void?isInstanceOf(Class?type,?Object?obj,?String?message)

//?要求參數(shù)?`subType`?必須是參數(shù)?superType?的子類或?qū)崿F(xiàn)類推姻,否則拋出異常,不予放行

void?isAssignable(Class?superType,?Class?subType,?String?message)

對象框沟、數(shù)組藏古、集合

2.ObjectUtils

獲取對象的基本信息

//?獲取對象的類名。參數(shù)為 null 時忍燥,返回字符串:"null"?

String?nullSafeClassName(Object?obj)

//?參數(shù)為?null?時拧晕,返回?0

int?nullSafeHashCode(Object?object)

//?參數(shù)為 null 時,返回字符串:"null"

String?nullSafeToString(boolean[]?array)

//?獲取對象 HashCode(十六進制形式字符串)梅垄。參數(shù)為 null 時厂捞,返回?0?

String?getIdentityHexString(Object?obj)

//?獲取對象的類名和 HashCode。?參數(shù)為 null 時队丝,返回字符串:""?

String?identityToString(Object?obj)

//?相當于 toString()方法靡馁,但參數(shù)為 null 時,返回字符串:""

String?getDisplayString(Object?obj)

判斷工具

//?判斷數(shù)組是否為空

boolean?isEmpty(Object[]?array)

//?判斷參數(shù)對象是否是數(shù)組

boolean?isArray(Object?obj)

//?判斷數(shù)組中是否包含指定元素

boolean?containsElement(Object[]?array,?Object?element)

//?相等机久,或同為?null時臭墨,返回?true

boolean?nullSafeEquals(Object?o1,?Object?o2)

/*

判斷參數(shù)對象是否為空,判斷標準為:

????Optional:?Optional.empty()

???????Array:?length?==?0

CharSequence:?length?==?0

??Collection:?Collection.isEmpty()

?????????Map:?Map.isEmpty()

?*/

boolean?isEmpty(Object?obj)

其他工具方法

//?向參數(shù)數(shù)組的末尾追加新元素膘盖,并返回一個新數(shù)組

<A,?O?extends?A>?A[]?addObjectToArray(A[]?array,?O?obj)

//?原生基礎類型數(shù)組?-->?包裝類數(shù)組

Object[]?toObjectArray(Object?source)

3.StringUtils

字符串判斷工具

//?判斷字符串是否為?null胧弛,或?""。注意侠畔,包含空白符的字符串為非空

boolean?isEmpty(Object?str)

//?判斷字符串是否是以指定內(nèi)容結(jié)束结缚。忽略大小寫

boolean?endsWithIgnoreCase(String?str,?String?suffix)

//?判斷字符串是否已指定內(nèi)容開頭。忽略大小寫

boolean?startsWithIgnoreCase(String?str,?String?prefix)?

//?是否包含空白符

boolean?containsWhitespace(String?str)

//?判斷字符串非空且長度不為?0软棺,即掺冠,Not?Empty

boolean?hasLength(CharSequence?str)

//?判斷字符串是否包含實際內(nèi)容,即非僅包含空白符,也就是?Not?Blank

boolean?hasText(CharSequence?str)

//?判斷字符串指定索引處是否包含一個子串德崭。

boolean?substringMatch(CharSequence?str,?int?index,?CharSequence?substring)

//?計算一個字符串中指定子串的出現(xiàn)次數(shù)

int?countOccurrencesOf(String?str,?String?sub)

字符串操作工具

//?查找并替換指定子串

String?replace(String?inString,?String?oldPattern,?String?newPattern)

//?去除尾部的特定字符

String?trimTrailingCharacter(String?str,?char?trailingCharacter)?

//?去除頭部的特定字符

String?trimLeadingCharacter(String?str,?char?leadingCharacter)

//?去除頭部的空白符

String?trimLeadingWhitespace(String?str)

//?去除頭部的空白符

String?trimTrailingWhitespace(String?str)

//?去除頭部和尾部的空白符

String?trimWhitespace(String?str)

//?刪除開頭斥黑、結(jié)尾和中間的空白符

String?trimAllWhitespace(String?str)

//?刪除指定子串

String?delete(String?inString,?String?pattern)

//?刪除指定字符(可以是多個)

String?deleteAny(String?inString,?String?charsToDelete)

//?對數(shù)組的每一項執(zhí)行?trim()?方法

String[]?trimArrayElements(String[]?array)

//?將?URL?字符串進行解碼

String?uriDecode(String?source,?Charset?charset)

路徑相關工具方法

//?解析路徑字符串,優(yōu)化其中的?“..”?

String?cleanPath(String?path)

//?解析路徑字符串眉厨,解析出文件名部分

String?getFilename(String?path)

//?解析路徑字符串锌奴,解析出文件后綴名

String?getFilenameExtension(String?path)

//?比較兩個兩個字符串,判斷是否是同一個路徑憾股。會自動處理路徑中的?“..”?

boolean?pathEquals(String?path1,?String?path2)

//?刪除文件路徑名中的后綴部分

String?stripFilenameExtension(String?path)?

//?以?“.?作為分隔符鹿蜀,獲取其最后一部分

String?unqualify(String?qualifiedName)

//?以指定字符作為分隔符,獲取其最后一部分

String?unqualify(String?qualifiedName,?char?separator)

3.CollectionUtils

集合判斷工具

//?判斷?List/Set?是否為空

boolean?isEmpty(Collection<?>?collection)

//?判斷?Map?是否為空

boolean?isEmpty(Map<?,?>?map)

//?判斷?List/Set?中是否包含某個對象

boolean?containsInstance(Collection<?>?collection,?Object?element)

//?以迭代器的方式服球,判斷?List/Set?中是否包含某個對象

boolean?contains(Iterator<?>?iterator,?Object?element)

//?判斷?List/Set?是否包含某些對象中的任意一個

boolean?containsAny(Collection<?>?source,?Collection<?>?candidates)

//?判斷 List/Set 中的每個元素是否唯一茴恰。即 List/Set 中不存在重復元素

boolean?hasUniqueObject(Collection<?>?collection)

集合操作工具

//?將?Array?中的元素都添加到?List/Set?中

<E>?void?mergeArrayIntoCollection(Object?array,?Collection<E>?collection)??

//?將?Properties?中的鍵值對都添加到?Map?中

<K,V>?void?mergePropertiesIntoMap(Properties?props,?Map<K,V>?map)

//?返回?List?中最后一個元素

<T>?T?lastElement(List<T>?list)??

//?返回?Set?中最后一個元素

<T>?T?lastElement(Set<T>?set)?

//?返回參數(shù)?candidates?中第一個存在于參數(shù)?source?中的元素

<E>?E?findFirstMatch(Collection<?>?source,?Collection<E>?candidates)

//?返回 List/Set 中指定類型的元素。

<T>?T?findValueOfType(Collection<?>?collection,?Class<T>?type)

//?返回 List/Set 中指定類型的元素斩熊。如果第一種類型未找到往枣,則查找第二種類型,以此類推

Object?findValueOfType(Collection<?>?collection,?Class<?>[]?types)

//?返回?List/Set?中元素的類型

Class<?>?findCommonElementType(Collection<?>?collection)

文件粉渠、資源分冈、IO 流

4.FileCopyUtils

輸入

//?從文件中讀入到字節(jié)數(shù)組中

byte[]?copyToByteArray(File?in)

//?從輸入流中讀入到字節(jié)數(shù)組中

byte[]?copyToByteArray(InputStream?in)

//?從輸入流中讀入到字符串中

String?copyToString(Reader?in)

輸出

//?從字節(jié)數(shù)組到文件

void?copy(byte[]?in,?File?out)

//?從文件到文件

int?copy(File?in,?File?out)

//?從字節(jié)數(shù)組到輸出流

void?copy(byte[]?in,?OutputStream?out)?

//?從輸入流到輸出流

int?copy(InputStream?in,?OutputStream?out)?

//?從輸入流到輸出流

int?copy(Reader?in,?Writer?out)

//?從字符串到輸出流

void?copy(String?in,?Writer?out)

5.ResourceUtils

從資源路徑獲取文件

//?判斷字符串是否是一個合法的 URL 字符串。

static?boolean?isUrl(String?resourceLocation)

//?獲取?URL

static?URL?getURL(String?resourceLocation)?

//?獲取文件(在?JAR?包內(nèi)無法正常使用霸株,需要是一個獨立的文件)

static?File?getFile(String?resourceLocation)

Resource

//?文件系統(tǒng)資源?D:\...

FileSystemResource

//?URL?資源雕沉,如?file://...?http://...

UrlResource

//?類路徑下的資源,classpth:...

ClassPathResource

//?Web?容器上下文中的資源(jar?包去件、war?包)

ServletContextResource

//?判斷資源是否存在

boolean?exists()

//?從資源中獲得?File?對象

File?getFile()

//?從資源中獲得?URI?對象

URI?getURI()

//?從資源中獲得?URI?對象

URL?getURL()

//?獲得資源的?InputStream

InputStream?getInputStream()

//?獲得資源的描述信息

String?getDescription()

6.StreamUtils

輸入

void?copy(byte[]?in,?OutputStream?out)

int?copy(InputStream?in,?OutputStream?out)

void?copy(String?in,?Charset?charset,?OutputStream?out)

long?copyRange(InputStream?in,?OutputStream?out,?long?start,?long?end)

輸出

byte[]?copyToByteArray(InputStream?in)

String?copyToString(InputStream?in,?Charset?charset)

//?舍棄輸入流中的內(nèi)容

int?drain(InputStream?in)?

反射坡椒、AOP

7.ReflectionUtils

獲取方法

//?在類中查找指定方法

Method?findMethod(Class<?>?clazz,?String?name)?

//?同上,額外提供方法參數(shù)類型作查找條件

Method?findMethod(Class<?>?clazz,?String?name,?Class<?>...?paramTypes)?

//?獲得類中所有方法尤溜,包括繼承而來的

Method[]?getAllDeclaredMethods(Class<?>?leafClass)?

//?在類中查找指定構(gòu)造方法

Constructor<T>?accessibleConstructor(Class<T>?clazz,?Class<?>...?parameterTypes)?

//?是否是?equals()?方法

boolean?isEqualsMethod(Method?method)?

//?是否是?hashCode()?方法?

boolean?isHashCodeMethod(Method?method)?

//?是否是?toString()?方法

boolean?isToStringMethod(Method?method)?

//?是否是從?Object?類繼承而來的方法

boolean?isObjectMethod(Method?method)?

//?檢查一個方法是否聲明拋出指定異常

boolean?declaresException(Method?method,?Class<?>?exceptionType)?

執(zhí)行方法

//?執(zhí)行方法

Object?invokeMethod(Method?method,?Object?target)??

//?同上倔叼,提供方法參數(shù)

Object?invokeMethod(Method?method,?Object?target,?Object...?args)?

//?取消 Java 權(quán)限檢查。以便后續(xù)執(zhí)行該私有方法

void?makeAccessible(Method?method)?

//?取消 Java 權(quán)限檢查靴跛。以便后續(xù)執(zhí)行私有構(gòu)造方法

void?makeAccessible(Constructor<?>?ctor)?

獲取字段

//?在類中查找指定屬性

Field?findField(Class<?>?clazz,?String?name)?

//?同上缀雳,多提供了屬性的類型

Field?findField(Class<?>?clazz,?String?name,?Class<?>?type)?

//?是否為一個?"public?static?final"?屬性

boolean?isPublicStaticFinal(Field?field)?

設置字段

//?獲取?target?對象的?field?屬性值

Object?getField(Field?field,?Object?target)?

//?設置?target?對象的?field?屬性值,值為?value

void?setField(Field?field,?Object?target,?Object?value)?

//?同類對象屬性對等賦值

void?shallowCopyFieldState(Object?src,?Object?dest)

//?取消 Java 的權(quán)限控制檢查梢睛。以便后續(xù)讀寫該私有屬性

void?makeAccessible(Field?field)?

//?對類的每個屬性執(zhí)行?callback

void?doWithFields(Class<?>?clazz,?ReflectionUtils.FieldCallback?fc)?

//?同上肥印,多了個屬性過濾功能。

void?doWithFields(Class<?>?clazz,?ReflectionUtils.FieldCallback?fc,?

??????????????????ReflectionUtils.FieldFilter?ff)?

//?同上绝葡,但不包括繼承而來的屬性

void?doWithLocalFields(Class<?>?clazz,?ReflectionUtils.FieldCallback?fc)?

9.AopUtils

判斷代理類型

//?判斷是不是?Spring?代理對象

boolean?isAopProxy()

//?判斷是不是?jdk?動態(tài)代理對象

isJdkDynamicProxy()

//?判斷是不是?CGLIB?代理對象

boolean?isCglibProxy()

獲取被代理對象的 class

//?獲取被代理的目標?class

Class<?>?getTargetClass()

AopContext

獲取當前對象的代理對象

Object?currentProxy()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末深碱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子藏畅,更是在濱河造成了極大的恐慌敷硅,老刑警劉巖功咒,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绞蹦,居然都是意外死亡力奋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門幽七,熙熙樓的掌柜王于貴愁眉苦臉地迎上來景殷,“玉大人,你說我怎么就攤上這事澡屡≡持浚” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵驶鹉,是天一觀的道長绩蜻。 經(jīng)常有香客問我,道長室埋,這世上最難降的妖魔是什么办绝? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮词顾,結(jié)果婚禮上八秃,老公的妹妹穿的比我還像新娘碱妆。我一直安慰自己肉盹,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布疹尾。 她就那樣靜靜地躺著上忍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纳本。 梳的紋絲不亂的頭發(fā)上窍蓝,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音繁成,去河邊找鬼吓笙。 笑死,一個胖子當著我的面吹牛巾腕,可吹牛的內(nèi)容都是我干的面睛。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼尊搬,長吁一口氣:“原來是場噩夢啊……” “哼叁鉴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起佛寿,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤幌墓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體常侣,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蜡饵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胳施。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片验残。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖巾乳,靈堂內(nèi)的尸體忽然破棺而出您没,到底是詐尸還是另有隱情,我是刑警寧澤胆绊,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布氨鹏,位于F島的核電站,受9級特大地震影響压状,放射性物質(zhì)發(fā)生泄漏仆抵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一种冬、第九天 我趴在偏房一處隱蔽的房頂上張望镣丑。 院中可真熱鬧,春花似錦娱两、人聲如沸莺匠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趣竣。三九已至,卻和暖如春旱物,著一層夾襖步出監(jiān)牢的瞬間遥缕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工宵呛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留单匣,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓宝穗,卻偏偏與公主長得像户秤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子讽营,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容