java - Why my equals method won't work? -
assertEquals (def.getMengs (), exp.getMengs ());
विफल रहता है, रिपोर्टिंग: अपेक्षित: java.util.HashSet & lt; [... तो geht die Legende ... ... किंवदंती यह है ...]> लेकिन था: जावा उपयोग.हाशसेट और लेफ्टिनेंट; [... तो गहट डे लिएंगेडे ... ... किंवदंती है ...]>
वास्तव में, डीबगर के माध्यम से मैं देखता हूं कि दोनों सेट में केवल एक ही शब्द है objId = 1 दोनों के लिए। मुझे उम्मीद है कि उपरोक्त कामों के लिए मीनिंग क्लास (एंटीटी) में निम्नलिखित कोड की उम्मीद है।
@ ओवरराइड पब्लिक बूलियन बराबर (ऑब्जेक्ट ऑब्जेक्ट) {अगर (! (ऑब्जेक्ट इंस्टॉलेशन के अर्थ)) {return असत्य; } अन्य अर्थ = (अर्थ) ऑब्जेक्ट; अगर (अन्य! = नल & amp; objId == अन्य.ओबीजेआईडी) रिटर्न सही; विवरण झूठा है; } @ ओवरराइड पब्लिक इंट हैशोड () {इंटी हैश = 7; हैश = 67 * हैश + this.objId; वापसी हैश; }
वास्तव में, यह परीक्षा पास:
db.insert (व्यवस्थापक); अंतिम अर्थ मँग = नए अर्थ (व्यवस्थापक, नई अभिव्यक्ति ("एसेन")); meng.setObjId (11); अंतिम अर्थ meng1 = नया अर्थ (व्यवस्थापक, नया अभिव्यक्ति ("मंगेरी")); meng1.setObjId (11); assertEquals (मेंग, meng1);
तो मेरी समस्या क्या हो सकती है? थेरी दोनों हैंशसेट हैं, वे दोनों एक ही आकार के हैं, और उनके भीतर के सामान बराबर हैं। वास्तव में
<पूर्व> assertEquals (def.getMengs ()। Iterator ()। अगले (), exp.getMengs ()। Iterator ()। Next ());
इससे पहले ही पास हो जाता है हालांकि यह नहीं होगा (लेकिन मैं नहीं जानता क्यों):
assertTrue (def.getMengs ()। शामिल सभी (exp.getMengs ()));
तो, यह समस्या है।
यहां पर परीक्षण कोड है:
प्रयास करें {db.insertWords (toenumMap (बढ़त [i ],व्यवस्थापक)); } पकड़ (अपवाद ई) {विफल (ई। मेसेसेज ()); } अंतिम अभिव्यक्ति exp = db.get (अभिव्यक्ति। वर्ग, में [i] [0]) बढ़े हैं; टेस्ट गेन्डर (एक्सपी, मेग्स [आई] [2]); अंतिम अभिव्यक्ति def = db.get (अभिव्यक्ति। वर्ग, मेंग [i] [1]); assertNotNull (डीईएफ़); एस्टरटेक्स्ट (डीफ़.गेटमेंग्स ()। इटरेटर ()। अगले (), एक्सपी। गेटमेंग्स ()। इटरेटर ()। अगले ()); AssertEquals (exp.getMengs ()। आकार (), def.getMengs ()। आकार ()); assertTrue (। def.getMengs () containsAll (def.getMengs ())); assertTrue (। def.getMengs () containsAll (exp.getMengs ())); जोर देना (def.getMengs (), exp.getMengs ());
डीबी.एजेट सिर्फ एमआरएफ को लपेटता है। InsertWords को डीईफ़ और एक्सपी को कायम रखना चाहिए।
सार्वजनिक शून्य सम्मिलित करेंशब्दों (EnumMap & lt; इनपुट, मेमोइन्टीटी & gt; इनपुट) एकाधिकमेंग्स एक्सपेशेशन फेंकता है {insert (input.get (Input.expression)); // INSERT या Ignore अंतिम बूलीयन है NewDef = insert (input.get (Input.definition)); अंतिम अभिव्यक्ति def = get (अभिव्यक्ति.क्लास, इनपुट.गेट (इनपुट.डिफ़िनिशन) .getId ()); अंतिम अभिव्यक्ति exp = प्राप्त (अभिव्यक्ति। वर्ग, इनपुट। गेट (इनपुट। एक्सप्रेशन) .getId ()); अंतिम MUser usr = get (MUser.class, input.get (Input.user) .getId ()); अंतिम सेट & lt; अर्थ & gt; मेंग = मिलते हैं (यूएसआर, डीईएफ़, हैन्यूडीफ); यदि (mengs == null) {// यूज़र फाइनल के लिए नया है, अर्थिंग मँग = नए अर्थ (यूएसआर, एक्सपी, डीईफ़); सम्मिलित (मेंग); } Else {// पुराना अर्थ अगर (mengs.size () & gt; 1) नए multimengsException फेंको; अन्य {अंतिम अर्थ मँग = मोंग्सिटिटर ()। अगला (); meng.addExp (समा); meng.setLastPublishedDate (शून्य); // reschedule}} Logger.getAnonymousLogger ()। लॉग (Level.INFO, "जोड़ा गया युग्म & lt; {0}, {1} & gt;", नई स्ट्रिंग [] {exp.getExpression (), def.getExpression ()} ); } सार्वजनिक बूलियन सम्मिलन (अंतिम मेमोइनेटिटी इकाई) {यदि (em.find (entity.getClass (), entity.getId ()) == नल) {et.begin (); em.persist (इकाई); et.commit (); वापस सच; } विवरण झूठा है; } सार्वजनिक & lt; MemoEntity & gt; MemoEntity (अंतिम कक्षा & lt; MemoEntity & gt; इकाई क्लास, अंतिम ऑब्जेक्ट प्राइमरीकि) {वापसी em.find (एंटिटी क्लास, प्राइमरीक); आप हाइबरनेट संस्थाओं का उपयोग कर रहे हैं, इसलिए आपको सीधे सदस्य चर का संदर्भ नहीं लेना चाहिए, जैसा कि वे डेटाबेस से आलसी लोड हो सकते हैं इसलिए, आपकी बराबर / हैशोड विधि को objId के बजाय getObjId () का उपयोग करना चाहिए। भी, जैसा कि एक और पोस्ट में उल्लिखित है, यदि आपका ओब्ज़िड ऑब्जेक्ट प्रकार (पूर्णांक, लांग) है, तो आपको " == "।
Comments
Post a Comment