कुछ दिन पहले हमने अपनी कंपनी के भीतर जावा 7 पर स्विच किया - अंततः! जे \ o/तो मैं बाहर Objects
कक्षा के बारे में मिल गया और चकित कैसे कम तरीकों hashCode()
equals()
और महसूस किया गया, डिफ़ॉल्ट प्रति ग्रहण (ALT + SHIFT + एस द्वारा उत्पन्न की तुलना में boylerplate कोड का एक बहुत कुछ को कम करने था -> एच)।jdk 7 ऑब्जेक्ट्स क्लास से कॉम्पैक्ट बराबर() और हैशकोड() उत्पन्न करने के लिए ग्रहण कैसे सिखाया जाए?
मैं सोच रहा था कि क्या मैं hashCode()
और equals()
उत्पन्न ग्रहण के डिफ़ॉल्ट व्यवहार को बदल सकता हूं?
मैं यह देखने में खुशी होगी:
@Override
public int hashCode()
{
return Objects.hash(one, two, three, four/*, ...*/);
}
बजाय इस बात का
:
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((one == null) ? 0 : one.hashCode());
result = prime * result + ((two == null) ? 0 : two.hashCode());
result = prime * result + ((three == null) ? 0 : three.hashCode());
result = prime * result + ((four== null) ? 0 : four.hashCode());
// ...
return result;
}
ही equals()
के लिए चला जाता है। This is the article मुझे यह मिला।
कोई भी विचार कैसे यह सबसे अच्छा महसूस करने के लिए?
के लिए "toString उत्पन्न()" यह wizzard के पृष्ठ पर एक टेम्पलेट परिभाषित करना संभव है। आपको [eclipse-bugzilla] (https://bugs.eclipse.org/bugs/) पर टिकट दर्ज करना चाहिए, शायद वे भविष्य में eq + हैशकोड के लिए कुछ समान जोड़ सकते हैं। यदि आप ऐसा करते हैं तो कृपया टिकट की तरह, इसलिए रुचि रखने वाले सभी लोग इसे ऊपर उठा सकते हैं! – Chriss
यदि आप इसे देखना नहीं चाहते हैं तो आप 'हैशकोड()' फ़ंक्शन को भी फोल्ड कर सकते हैं। मुझे लगता है कि भविष्य में सभी संभावित मामलों में डिफ़ॉल्ट कार्यान्वयन क्या है या नहीं, यह विचार करना एक अच्छा विचार हो सकता है। शॉर्टंड अभिव्यक्ति को डिफॉल्ट करके आप 'हैशकोड' (कोर्स के अपरिवर्तनीय नहीं) को ट्विक करने में अपनी लचीलापन से गुज़रेंगे, क्या आपको ऐसा करना/चाहिए। हैश फ़ंक्शंस पर चर्चा के लिए http://stackoverflow.com/questions/12076846/using-a-larger-prime-as-a-multiplier-when-overriding-hashcode देखें। – posdef
मैंने इस वृद्धि को लॉग किया है। इसके लिए वोट दें! https://bugs.eclipse.org/bugs/show_bug.cgi?id=424214 –