日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java多参方法_Java中多参数方法进阶

發(fā)布時(shí)間:2024/9/27 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多参方法_Java中多参数方法进阶 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

多參數(shù)方法的問(wèn)題

相信很多人曾經(jīng)都寫(xiě)過(guò)多參數(shù)的構(gòu)造方法,就像下面示例的代碼。

當(dāng)想要?jiǎng)?chuàng)建一個(gè)給全部屬性賦值的實(shí)例的時(shí)候,就會(huì)利用這個(gè)多參數(shù)的構(gòu)造方法。但是,當(dāng)類的屬性特別多的時(shí)候,你還會(huì)這么寫(xiě)嗎?

如果你寫(xiě)了一個(gè)包含N個(gè)參數(shù)的多參數(shù)構(gòu)造方法,當(dāng)創(chuàng)建實(shí)例的時(shí)候,是不是特別謹(jǐn)慎的在大腦里記著第幾個(gè)參數(shù)是給哪個(gè)屬性賦值的,生怕給弄錯(cuò)了,當(dāng)然類型不對(duì)的時(shí)候,編譯器還會(huì)友善的提醒賦值錯(cuò)了,但對(duì)那些類型相同的屬性,如果不小心顛倒了兩個(gè)參數(shù)的順序,編譯器也愛(ài)莫能助了,程序運(yùn)行起來(lái)也不會(huì)報(bào)錯(cuò),就是執(zhí)行結(jié)果不是期望值。

如果有人寫(xiě)了一個(gè)包含N個(gè)參數(shù)的多參數(shù)構(gòu)造方法并打包后提供給你使用,又如果你看不到方法的源代碼或Javadoc,更不巧這些參數(shù)的名稱很隨意(例如arg1、arg2...argN等),你會(huì)不會(huì)惡狠狠的在背后慰問(wèn)代碼的作者。

這種多參數(shù)的構(gòu)造方法,當(dāng)參數(shù)的個(gè)數(shù)小于等于3的時(shí)候不是很糟糕,但是,隨著參數(shù)個(gè)數(shù)越來(lái)越多的時(shí)候,這種構(gòu)造實(shí)例的方法就會(huì)失去控制,變得難以使用。

看到這里,也許有人會(huì)說(shuō),當(dāng)然不會(huì)寫(xiě)一個(gè)包含N個(gè)參數(shù)的多參數(shù)構(gòu)造方法,可以使用默認(rèn)的構(gòu)造方法創(chuàng)建實(shí)例,然后使用setter方法給各個(gè)屬性一一賦值,就像下面示例代碼這樣。

不得不說(shuō)這種方式創(chuàng)建實(shí)例很容易,產(chǎn)生的代碼也易讀,同時(shí)也是使用最頻繁的方式。但是,它有很嚴(yán)重的缺點(diǎn),就是一旦提供了屬性的setter方法,則代表你可以在任何地方、任何時(shí)候給某個(gè)或某些屬性單獨(dú)賦值,致使實(shí)例的構(gòu)造被分散到各個(gè)角落,最終可能會(huì)導(dǎo)致連代碼原作者都不知道在哪里給某個(gè)屬性“又”賦了值,導(dǎo)致實(shí)例數(shù)據(jù)不一致,調(diào)試查找問(wèn)題也很麻煩。

這里筆者分享一個(gè)曾經(jīng)經(jīng)歷的,使用setter方法給屬性賦值的坑。很早之前使用Hibernate進(jìn)行CRUD操作,大家都知道Hibernate的get和load方法查詢出的實(shí)體對(duì)象會(huì)被緩存,并且是處于持久態(tài)的,持久態(tài)的實(shí)體無(wú)論你顯示調(diào)用update操作或不調(diào)用,只要它在一個(gè)事務(wù)中,當(dāng)事務(wù)被提交的時(shí)候,它會(huì)比較緩存中實(shí)體數(shù)據(jù)和快照區(qū)中的實(shí)體數(shù)據(jù),將變化主動(dòng)更新到數(shù)據(jù)庫(kù)中,坑就出現(xiàn)在這里。查詢出來(lái)的實(shí)體對(duì)象被當(dāng)做參數(shù)傳遞到了其它方法中,而此時(shí)為了某些操作的需要,調(diào)用了某個(gè)屬性的setter方法賦值,但是并沒(méi)有顯示調(diào)用update方法,導(dǎo)致看上去每次執(zhí)行完查詢數(shù)據(jù)就被自動(dòng)更新,查找原因起來(lái)不是很容易。這就是使用setter方法導(dǎo)致的賦值分散的問(wèn)題。

相信大多數(shù)人都寫(xiě)過(guò)或使用過(guò)多參數(shù)的普通方法,就像下面示例的代碼。

可能會(huì)有人覺(jué)得這沒(méi)什么,不就5個(gè)參數(shù)嘛!沒(méi)事,就這么寫(xiě)!對(duì)于這種覺(jué)悟,筆者只能說(shuō)你試試10個(gè)參數(shù)或更多,保證你會(huì)精神崩潰,即使你能忍受,調(diào)用你方法的同事保證會(huì)在背后慰問(wèn)你。

這種寫(xiě)法也同樣有上面多參數(shù)構(gòu)造方法的問(wèn)題,參數(shù)多了方法就會(huì)失去控制,難以使用。

多參數(shù)方法指南

對(duì)于多參數(shù)的構(gòu)造方法,使用Builder模式代替,就像下面的示例代碼。

從實(shí)例代碼可以看到,使用Builder模式構(gòu)造實(shí)例根本不需要費(fèi)盡心思的牢記參數(shù)列表,想給哪個(gè)屬性賦值直接顯示的給哪個(gè)屬性賦值,再也不怕賦錯(cuò)值,代碼清晰明了!注意看示例代碼中,實(shí)際給bank實(shí)例屬性賦值的地方,即下面的代碼。

可以看到在Bank的構(gòu)造方法里集中給各個(gè)屬性賦值,并不會(huì)分散賦值。如果想再次給某個(gè)屬性賦值,可以像示例代碼這樣。

對(duì)于普通方法,如果方法參數(shù)的個(gè)數(shù)大于三,將這些參數(shù)抽象成一個(gè)類,這些參數(shù)就是類的屬性,然后在多參數(shù)的方法中,使用這個(gè)類代替這些參數(shù),同時(shí)在這個(gè)參數(shù)類中提供Builder模式代碼用于創(chuàng)建類的實(shí)例,就像下面的示例代碼。

總結(jié)

以上是生活随笔為你收集整理的java多参方法_Java中多参数方法进阶的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。