真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

摘要

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

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

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

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

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

常見的等價(jià)方法陷阱

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

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

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

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

本文題目:Java編程中避免equals方法的隱藏陷阱介紹-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://weahome.cn/article/jspse.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部