成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Java編程中避免equals方法的隱藏陷阱介紹-創(chuàng)新互聯(lián)

摘要

創(chuàng)新互聯(lián)專注于臺山企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計,商城網(wǎng)站建設(shè)。臺山網(wǎng)站建設(shè)公司,為臺山等地區(qū)提供建站服務(wù)。全流程按需開發(fā),專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

本文描述重載equals方法的技術(shù),這種技術(shù)即使是具現(xiàn)類的子類增加了字段也能保證equal語義的正確性。

在《Effective Java》的第8項中,Josh Bloch描述了當(dāng)繼承類作為面向?qū)ο笳Z言中的等價關(guān)系的基礎(chǔ)問題,要保證派生類的equal正確性語義所會面對的困難。Bloch這樣寫到:

除非你忘記了面向?qū)ο蟪橄蟮暮锰?,否則在當(dāng)你繼承一個新類或在類中增加了一個值組件時你無法同時保證equal的語義依然正確

在《Programming in Scala》中的第28章演示了一種方法,這種方法允許即使繼承了新類,增加了新的值組件,equal的語義仍然能得到保證。雖然在這本書中這項技術(shù)是在使用Scala類環(huán)境中,但是這項技術(shù)同樣可以應(yīng)用于Java定義的類中。在本文中的描述來自于Programming in Scala中的文字描述,但是代碼被我從scala翻譯成了Java

常見的等價方法陷阱

java.lang.Object 類定義了equals這個方法,它的子類可以通過重載來覆蓋它。不幸的是,在面向?qū)ο笾袑懗稣_的equals方法是非常困難的。事實上,在研究了大量的Java代碼后,2007 paper的作者得出了如下的一個結(jié)論:

幾乎所有的equals方法的實現(xiàn)都是錯誤的!

這個問題是因為等價是和很多其他的事物相關(guān)聯(lián)。例如其中之一,一個的類型C的錯誤等價方法可能意味著你無法將這個類型C的對象可信賴的放入到容器中。比如說,你有兩個元素elem1和elem2他們都是類型C的對象,并且他們是相等,即 elem1.equals(elm2) 返回ture。但是,只要這個equals方法是錯誤的實現(xiàn),那么你就有可能會看見如下的一些行為:

Set hashSet<c> = new java.util.HashSet<c>();
hashSet.add(elem1);
hashSet.contains(elem2);  // returns false!</c></c>

網(wǎng)頁標(biāo)題:Java編程中避免equals方法的隱藏陷阱介紹-創(chuàng)新互聯(lián)
本文地址:http://jinyejixie.com/article34/jspse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、自適應(yīng)網(wǎng)站軟件開發(fā)、全網(wǎng)營銷推廣響應(yīng)式網(wǎng)站、虛擬主機

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
保德县| 绥宁县| 泗阳县| 金门县| 东阳市| 兴宁市| 信阳市| 平果县| 新郑市| 万安县| 浙江省| 手机| 和平区| 临泽县| 敖汉旗| 左权县| 香港 | 苍梧县| 呈贡县| 泗水县| 大石桥市| 彰武县| 兴隆县| 通江县| 西华县| 峨山| 登封市| 筠连县| 西青区| 林口县| 始兴县| 罗定市| 高雄县| 黄大仙区| 潜山县| 荥阳市| 远安县| 马尔康县| 建平县| 沧州市| 尼勒克县|