JavaRush /Java Blog /Random-TL /Magbalik ng zero-length na array, hindi null
alexnjc
Antas

Magbalik ng zero-length na array, hindi null

Nai-publish sa grupo
Kadalasan mayroong mga pamamaraan na ganito ang hitsura:
private List cheesesInStock =;
/**
* @return массив, содержащий все сыры, имеющиеся в магазине,
* or null, если сыров для продажи нет.
*/
public Cheese[] getCheeses() {
if (cheesesInStock.size() == 0)
return null;
}
Walang dahilan upang ituring bilang isang espesyal na kaso ang isang sitwasyon kung saan walang ibinebentang keso. Ito ay nangangailangan ng kliyente na magsulat ng karagdagang code upang maproseso ang halaga ng pagbabalik ng pamamaraan пull, halimbawa:
Cheese[] cheeses = shop.getCheeses();
if (cheeses ! = пull &&
Аrrауs.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILТON))
Sуstеm.оut.рrintln("Jоllу good, just the thing.");
sa halip na simple:
if  (Аrrаys.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILTON)) Sуstеm.оut.рrintln("Jоllу good, just the thing.");
Ang ganitong uri ng verbosity ay kinakailangan para sa halos bawat tawag sa pamamaraan na nagbabalik ng null sa halip na isang zero-length na array. Puno ito ng mga error, dahil maaaring walang nakasulat na espesyal na code ang developer ng kliyente para iproseso ang resulta null. Maaaring hindi matukoy ang error sa loob ng maraming taon dahil ang mga pamamaraang ito ay karaniwang nagbabalik ng isa o higit pang mga bagay. Dapat ding banggitin na ang pagbabalik nullsa halip na isang array ay humahantong sa komplikasyon ng mismong pamamaraan na nagbabalik ng array. Minsan ay pinagtatalunan na ang pagbabalik ng null ay mas mainam kaysa sa pagbabalik ng isang zero-length na array dahil iniiwasan nito ang gastos ng paglalaan ng array sa memorya. Nabigo ang argumentong ito sa dalawang dahilan. Una, walang punto sa pag-aalala tungkol sa pagganap sa antas na ito maliban kung ang pag-profile ng programa ay nagpapakita na ang partikular na pamamaraang ito ang pangunahing dahilan para sa pagkasira ng pagganap. Pangalawa, ang bawat tawag sa isang paraan na hindi nagbabalik ng mga tala ay maaaring magpasa ng parehong zero-length na array sa kliyente, dahil ang anumang zero-length na array ay hindi nababago, at ang mga hindi nababagong bagay ay maaaring ibahagi. Sa katunayan, ito mismo ang nangyayari kapag ginamit mo ang karaniwang idyoma upang itapon ang mga elemento mula sa isang koleksyon sa isang array na kinokontrol ng uri:
private List сhееsеsInStосk =,
private fiпаl static Cheese[] NULL_CHEESE_ARRAY = nеw Cheese[0];
 /**
* @геtuгп массие, содержащий все сыры, имеющиеся в магазине
*/
public Cheese[] getCheeses() {
геtuгп (Cheese[] сhееsеsInStосk.tоАггау(NULL_СНЕЕSЕ_АRRАУ);
}
Sa idyoma na ito, ang isang pare-pareho, bilang isang zero-length na array,toArray ay ipinapasa sa isang paraan upang ipahiwatig kung anong uri ang dapat itong ibalik. Karaniwan, ang pamamaraan toArrayay naglalaan ng puwang ng memorya para sa ibinalik na array, ngunit kung ang koleksyon ay walang laman, ito ay inilalagay sa input array, at Сollесtion,tоАггау(Оbjесt[])tinitiyak ng detalye na kung ang input array ay sapat na malaki upang maglaman ng koleksyon, iyon ang ibinalik. Samakatuwid, ang ipinakita na idyoma ay hindi kailanman maglalaan ng isang zero-length na array sa memorya, ngunit gumagamit ng isang "parehong partikular sa uri" bilang tulad. I-summarize natin. Walang dahilan para sa isang array method na ibalik ang null sa halip na isang zero-length array. Ang idyoma na ito ay lumilitaw na nagmula sa C programming language, kung saan ang haba ng isang array ay ibinalik nang hiwalay mula sa array mismo. Sa C, walang silbi ang paglalaan ng memorya para sa isang zero-length na array. Pinagmulan: Joshua Bloch, Java TM Effective Programming, Lori Publishing House
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION