2010-03-29 16 views
8

का उपयोग करके बराबर/हैशकोड/टूस्ट्रिंग उत्पन्न करना मेरा मानना ​​है कि मैंने कहीं भी लोगों को हैश/समानता परीक्षण का हिस्सा होना चाहिए यह पहचानकर संकलन समय (एपीटी का उपयोग करके) के बराबर/हैशकोड/टूस्ट्रिंग विधियों को उत्पन्न करने वाले लोगों को पढ़ा है। मुझे लगता है कि वेब पर की तरह कुछ भी नहीं मिला (मैं इसे सपना देखा हो सकता है?) ...एनोटेशन

ऐसा किया जा सकता है कि:

public class Person { 
    @Id @GeneratedValue private Integer id; 

    @Identity private String firstName, lastName; 
    @Identity private Date dateOfBirth; 

    //... 
} 

एक इकाई के लिए (इसलिए हम कुछ exlude करना चाहते हैं फ़ील्ड, आईडी की तरह)।

या एक स्केला मामले वर्ग की तरह एक मूल्य वस्तु अर्थात्:

@ValueObject 
public class Color { 
    private int red, green, blue; 
} 

इतना ही नहीं फ़ाइल अधिक पठनीय और आसान लिखने के लिए हो जाता है, लेकिन यह भी सुनिश्चित करना है कि सभी विशेषताओं बराबर/hashCode का हिस्सा हैं में मदद करता है (यदि आप बाद में विधियों को अद्यतन किए बिना, एक और विशेषता जोड़ते हैं)।

मैंने सुना है कि एपीटी आईडीई में बहुत अच्छी तरह से समर्थित नहीं है लेकिन मैं इसे एक प्रमुख मुद्दे के रूप में नहीं देखूंगा। आखिरकार, परीक्षण मुख्य रूप से निरंतर एकीकरण सर्वर द्वारा चलाए जाते हैं।

कोई विचार अगर यह पहले से ही किया गया है और यदि नहीं? धन्यवाद

उत्तर

2

Pojomatic संकलन समय बाईटकोड हेरफेर नहीं करता है, वहीं यह बराबरी, hashCode और toString तरीकों की आसान निर्माण का समर्थन करता है, उनके व्यवहार को अनुकूलित करने के एनोटेशन का उपयोग।

+1

दिलचस्प दृष्टिकोण। आश्चर्य है कि प्रदर्शन प्रभाव क्या है। –

1

लाइब्रेरी में Google का समाधान ऑटोवैल्यू: https://github.com/google/auto/tree/master/value संकलन से पहले स्रोतों की पीढ़ी @AutoValue एनोटेशन + का उपयोग करता है।

कई प्रतियोगी समाधान निम्नलिखित प्रस्तुति में चर्चा कर रहे हैं: https://docs.google.com/presentation/d/14u_h-lMn7f1rXE1nDiLX0azS3IkgjGl5uxp5jGJ75RE/edit