लोम्बोक गेट्टर / सेटर बनाम जावा 14 रिकॉर्ड


10

मैं परियोजना प्यार लंबोक लेकिन इन दिनों में मैं पढ़ रहा हूँ और जावा 14 की नई सुविधाओं में से कुछ की कोशिश कर रहा।

नई क्षमता के अंदर, रिकॉर्ड कीवर्ड है जो पहले से ही अंतर्निहित निम्न कार्यक्षमता के साथ एक वर्ग बनाने की अनुमति देता है: कंस्ट्रक्टर, निजी अंतिम फ़ील्ड, एक्सेसर्स, बराबर / हैशकोड, गेटर्स, इनस्ट्रिंग विधियाँ।

अब मेरा सवाल है: लोम्बोक की सुविधा पर भरोसा करना बेहतर है या क्या हमें रिकॉर्ड कार्यक्षमता का उपयोग करना शुरू करना चाहिए:

इसका उपयोग करना बेहतर है:

record Person (String name, String surname) {}

या वो:

@AllArgsConstructor
@ToString
@EqualsAndHashCode
public class GetterSetterExample {
  @Getter private int name;
  @Getter private int surname;
}

दोनों दृष्टिकोण के पक्ष और विपक्ष क्या हैं?


एक बात के लिए, recordJavaBeans शैली पाने वालों और बसने वालों से अपेक्षा करने वाली चीजों के लिए काम नहीं करेगा।
मार्क रोटेटेवेल

2
रोटेटवेल की टिप्पणी का मतलब यह है कि एक रिकॉर्ड पर संपत्ति अभिगम विधि का नाम संपत्ति का एक ही नाम है। तो, के रूप में के रूप में alice.phoneNumber()उपसर्ग के JavaBeans सम्मेलन के बजाय । getalice.getPhoneNumber()
तुलसी बॉर्क

1
recordसुविधा के लिए एक है पूर्वावलोकन सुविधा , अभी तक नहीं तैयार उत्पादन में इस्तेमाल के लिए।
बेसिल बॉर्क

रिकॉर्ड्स में कक्षाओं की तुलना में बहुत अधिक प्रतिबंध हैं, एक रिकॉर्ड उदाहरण के लिए किसी अन्य रिकॉर्ड या वर्ग का विस्तार नहीं कर सकता है, इस विवरण पर प्रतिबंध अनुभाग की जांच करें। आगे के विवरण के लिए jj openjdk.java.net/jeps/359
NAIT

जवाबों:


9

लोम्बोक और recordजावा भाषा की विशेषता, विभिन्न चीजों के लिए अलग-अलग उपकरण हैं। वहाँ कुछ सतही ओवरलैप है, लेकिन उसे विचलित न होने दें।

लोम्बोक मुख्यतः सिंटैक्टिक सुविधा के बारे में है ; यह एक मैक्रो-प्रोसेसर है जो कोड के कुछ ज्ञात उपयोगी पैटर्न के साथ प्री-लोडेड है। यह किसी भी शब्दार्थ को प्रदान नहीं करता है; यह सिर्फ एनोटेशन के साथ कोड में सेट किए गए कुछ नॉब के अनुसार, पैटर्न को स्वचालित करता है। लोम्बोक विशुद्ध रूप से डेटा ले जाने वाली कक्षाओं को लागू करने की सुविधा के बारे में है।

अभिलेख एक अर्थ विशेषता है; वे नाममात्र टुपल्स हैं । एक शब्दार्थ घोषणा है कि एक टपल Point है बनाने के द्वारा (int x, int y), संकलक इस राज्य विवरण से अपने प्रतिनिधित्व, साथ ही निर्माण, घोषणा, समानता, हैशिंग और स्ट्रिंग प्रतिनिधित्व प्रोटोकॉल प्राप्त कर सकते हैं। चूँकि वे शब्दार्थ को ढोते हैं, पाठक और रूपरेखा अभिलेखों के एपीआई के बारे में उच्च विश्वास के साथ भी कारण बन सकते हैं। (यह सिंटैक्टिक रूप से सुविधाजनक भी हो सकता है; यदि हां, तो यह बहुत अच्छा है।)


1
+1 ब्रायन गोएट्ज़: और यह मानकर कि आप अपने IDE में वर्तमान लोम्बोक संस्करण प्राप्त कर सकते हैं। मुझे आश्चर्य है कि अगर लोम्बोक का कोई सार्थक फायदा होता है, तो जल्दी कोड पढ़ने के संबंध में कि एक वर्ग टिप्पणी नहीं करेगा।
ट्रंक

4

मैं कुछ समय के लिए इस संयोजन के साथ खेल रहा हूं और थोड़े से हाथों पर मैं निम्नलिखित अंतरों को सूचीबद्ध कर सकता हूं:

लंबोक

  • रिकॉर्ड अभी तक एक जारी की गई सुविधा नहीं हैं और केवल एक पूर्वावलोकन सुविधा हैं। इसलिए लोम्बोक के साथ रहना ज्यादा मायने रखता है।
  • वे अभी तक लोम्बोक को एक साथ खत्म करने के लिए एक शक्तिशाली उपकरण नहीं हैं। ध्यान दें कि लाइब्रेरी के पास सिर्फ और सिर्फ पेशकश करने के लिए बहुत कुछ है @Getter, @AllArgsConstructor, @ToString, @EqualsAndHashCode
  • स्वयं के द्वारा अनुभव किया गया, EqualsAndHashCodeवैसा नहीं है जैसा कि आप अपेक्षा करते हैं कि जब यह रिकॉर्ड्स की ओर पलायन करने की बात आती है

अभिलेख

  • एक अलग नोट पर, यदि आपके ऑब्जेक्ट प्रतिनिधित्व की आवश्यकता एक "डेटा वाहक" होने के लिए है, तो आप ठीक से प्रदर्शन करने के लिए बॉयलरप्लेट कोड को कम करने के लिए अतिरिक्त लाइब्रेरी पर भरोसा किए बिना, रिकॉर्ड का लाभ उठा सकते हैं। यही कारण है कि एक निर्णायक नोट के रूप में यह ब्लॉग निम्नलिखित को पढ़ता है:

    यह टीमों को अंतर्निहित पैटर्न के कई हाथ-कोडित कार्यान्वयन को खत्म करने और लोम्बोक जैसी पुस्तकालयों की आवश्यकता को कम करने या हटाने में मदद करेगा।

बेशक, दिन-प्रतिदिन के आधार पर, यह हमेशा एक परियोजना की आवश्यकताओं के आधार पर बुद्धिमान होता है कि किस तरीके का चयन करें और अभ्यास करें।


नोट - मैं इस बात को अधिक उदाहरणों के साथ अद्यतन रखने का प्रयास करूँगा कि एक उपयोगकर्ता होने के लिए दोनों का उपयोग वर्तमान में किया जा रहा है।
नमन

3

NB: एनोटेशन के उस क्रिसमस ट्री के बजाय, आप बस @Valueक्लास में उपयोग कर सकते हैं । ध्यान दें कि यह वर्ग को अंतिम बनाता है, और सभी क्षेत्रों को निजी और अंतिम बनाता है, और आपको बाकी सभी भी देता है। यह रिकॉर्ड के करीब है (वे भी अंतिम हैं, और अंदर सभी फ़ील्ड अंतिम हैं)।

recordअभी भी पूर्वावलोकन में है, इसलिए उत्पादन कोड के लिए, जाहिर है कि यह अभी तक उपयुक्त नहीं है। लम्बोक का उपयोग करें।

एक बार रिकॉर्ड पूर्वावलोकन से बाहर हो जाने के बाद, यह अधिक जटिल है। लोम्बोक एफएआर अधिक लचीला है; आप आसानी से सभी कोड को फिर से लिखने के बिना कुछ नए पहलू में स्वैप कर सकते हैं (उदाहरण के लिए, आप अपनी कक्षा में 'एक्सटेंड्स' क्लॉज जोड़ सकते हैं, फिर समान और हैशकोड विधि को हस्तलिखित किए बिना; कुछ रिकॉर्ड आपको दे सकते हैं)। लोम्बोक आपको अधिक सुविधाएँ भी देता है: आप उदाहरण के लिए @Builderएनोटेशन जोड़कर एक बिल्डर जोड़ सकते हैं; कुछ रिकॉर्ड नहीं कर सकते।

यदि यह अत्यधिक संभावना नहीं है कि आप उस वर्ग के लिए किसी का उपयोग करने जा रहे हैं जिसे आप डिजाइन कर रहे हैं - मैं रिकॉर्ड का उपयोग करूंगा।

अस्वीकरण: मैं प्रोजेक्ट लोनोक का एक मुख्य योगदानकर्ता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.