कहो कि मेरे पास एक वर्ग है जिसमें कोई समान () विधि नहीं है, जिसके पास स्रोत नहीं है। मैं उस वर्ग के दो उदाहरणों पर समानता का दावा करना चाहता हूं।
मैं कई दावे कर सकता हूं:
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
मुझे यह समाधान पसंद नहीं है क्योंकि मुझे पूर्ण समानता की तस्वीर नहीं मिलती है यदि एक प्रारंभिक मुखर विफल रहता है।
मैं स्वयं अपने आप से तुलना कर सकता हूं और परिणाम ट्रैक कर सकता हूं:
String errorStr = "";
if(!obj1.getFieldA().equals(obj2.getFieldA())) {
errorStr += "expected: " + obj1.getFieldA() + ", actual: " + obj2.getFieldA() + "\n";
}
if(!obj1.getFieldB().equals(obj2.getFieldB())) {
errorStr += "expected: " + obj1.getFieldB() + ", actual: " + obj2.getFieldB() + "\n";
}
...
assertEquals("", errorStr);
यह मुझे पूर्ण समानता की तस्वीर देता है, लेकिन क्लंकी है (और मैंने संभावित अशक्त समस्याओं का भी हिसाब नहीं दिया है)। एक तीसरा विकल्प है कम्पैक्टर का उपयोग करना, लेकिन तुलना () मुझे यह नहीं बताएगा कि कौन से क्षेत्र समानता में विफल रहे।
क्या एक बेहतर प्रैक्टिस है जिसे मैं ऑब्जेक्ट से चाहता हूं, बिना सबक्लासिंग और ओवरराइडिंग बराबरी (ऊग) के बिना?
equal
पद्धति का कार्यान्वयन केवल यह बताता है कि क्या दो उदाहरण समान हैं, और हमें परवाह नहीं है कि इरादे समान क्यों नहीं हैं।
Object
में एक equals
विधि होती है, आप का मतलब शायद कोई अतिरंजित बराबरी का तरीका नहीं है।