बस आज लोम्बोक का उपयोग शुरू कर दिया। अब तक मुझे यह पसंद है, लेकिन एक कमी जो मैंने नहीं देखी थी वह थी समर्थन को फिर से भरना।
यदि आपके पास एक वर्ग एनोटेट है @Data
, तो यह क्षेत्र के नामों के आधार पर आपके लिए गेटर्स और सेटर्स उत्पन्न करेगा। यदि आप किसी अन्य क्लास में उन गेटर्स में से किसी एक का उपयोग करते हैं, तो तय करें कि फ़ील्ड खराब नाम पर है, यह उन गेटर्स और बसने वालों का उपयोग नहीं करेगा और पुराने नाम को नए नाम से बदल देगा।
मुझे लगता है कि यह एक IDE प्लग-इन के माध्यम से किया जाना चाहिए, और लोम्बोक के माध्यम से नहीं।
अद्यतन (जनवरी 22 '13)
3 महीने के लिए लोम्बोक का उपयोग करने के बाद, मैं अभी भी ज्यादातर परियोजनाओं के लिए इसकी सिफारिश करता हूं। हालाँकि, मैंने एक और कमी पाई है, जो ऊपर सूचीबद्ध सूची के समान है।
यदि आपके पास एक वर्ग है, तो कहें MyCompoundObject.java
कि 2 सदस्य हैं, दोनों ने एनोटेट किया @Delegate
, कहते हैं myWidgets
और myGadgets
, जब आप myCompoundObject.getThingies()
किसी अन्य वर्ग से कॉल करते हैं , तो यह जानना असंभव है कि क्या यह प्रतिनिधि है Widget
या नहीं Gadget
क्योंकि आप अब आईडीई के भीतर स्रोत पर नहीं जा सकते।
एक्लिप्स "जनरेट डेलिगेट मेथड्स ..." का उपयोग करना आपको समान कार्यक्षमता प्रदान करता है, बस जल्दी है और सोर्स जंपिंग प्रदान करता है। नकारात्मक पक्ष यह है कि आपके स्रोत को बॉयलरप्लेट कोड के साथ बंद कर दिया जाता है जो महत्वपूर्ण सामानों पर ध्यान केंद्रित करता है।
अद्यतन 2 (फ़रवरी 26 '13)
5 महीने के बाद, हम अभी भी लोमबोक का उपयोग कर रहे हैं, लेकिन मुझे कुछ अन्य झुंझलाहट हैं। घोषित गेटटर और सेटर की कमी कई बार आपको परेशान कर सकती है जब आप खुद को नए कोड से परिचित कराने की कोशिश कर रहे हों।
उदाहरण के लिए, अगर मुझे कोई विधि दिखाई देती है, getDynamicCols()
लेकिन मुझे नहीं पता कि यह किस बारे में है, तो मुझे इस पद्धति के उद्देश्य को निर्धारित करने के लिए कूदने के लिए कुछ अतिरिक्त बाधाएँ हैं। कुछ बाधाएं लोम्बोक हैं, कुछ लोम्बोक स्मार्ट प्लगइन की कमी हैं। बाधाओं में शामिल हैं:
- JavaDocs की कमी। यदि मैं इस क्षेत्र में जावदॉक करता हूं, तो मुझे उम्मीद है कि लॉटर और सेटर लोनोक कंपार्टमेंट कदम के माध्यम से उस जवदोक को प्राप्त करेंगे।
- जंप टू मेथड परिभाषा मुझे कूदता है क्लास के लिए, लेकिन संपत्ति नहीं जो उत्पन्न करने वाला। यह एक प्लगइन समस्या है।
- स्पष्ट रूप से आप एक गेटर / सेटर में एक ब्रेकपॉइंट सेट करने में सक्षम नहीं हैं जब तक कि आप विधि उत्पन्न या कोड नहीं करते हैं।
- नोट: यह संदर्भ खोज कोई समस्या नहीं है क्योंकि मैंने पहले सोचा था कि यह था। आपको एक परिप्रेक्ष्य का उपयोग करने की आवश्यकता है जो आउटलाइन दृश्य को सक्षम करता है। अधिकांश डेवलपर्स के लिए कोई समस्या नहीं है। मेरी समस्या यह थी कि मैं माइलिन का उपयोग कर रहा था जो मेरे
Outline
विचार को फ़िल्टर कर रहा था, इसलिए मैंने तरीके नहीं देखे। संदर्भों की कमी। अगर मैं देखना चाहता हूं कि कॉलिंग किसे है getDynamicCols(args...)
, तो मुझे संदर्भ के लिए खोज करने में सक्षम होने के लिए सेटर को जेनरेट या कोड करना होगा।
अद्यतन 3 (मार्च 7 '13)
ग्रहण में चीजों के विभिन्न तरीकों का उपयोग करने के लिए सीखना मुझे लगता है। आप वास्तव में एक लोम्बोक उत्पन्न विधि पर एक सशर्त ब्रेकपॉइंट (बीपी) सेट कर सकते हैं। Outline
दृश्य का उपयोग करके , आप विधि को राइट-क्लिक कर सकते हैं Toggle Method Breakpoint
। फिर जब आप बीपी से टकराते हैं, तो आप डिबगिंग Variables
दृश्य का उपयोग यह देखने के लिए कर सकते हैं कि उत्पन्न विधि को पैरामीटर (आमतौर पर फ़ील्ड नाम के समान) और अंत में, Breakpoints
बीपी को राइट-क्लिक करने के लिए दृश्य का उपयोग करें और Breakpoint Properties...
एक शर्त जोड़ने के लिए चुनें । अच्छा लगा।
जब आप अपने मावेन पोम में लोम्बोक निर्भरता को अपडेट करते हैं, तो अपडेट 4 (अगस्त 16 '13) नेटबीन्स को यह पसंद नहीं है। परियोजना अभी भी संकलित करती है, लेकिन फाइलें संकलित त्रुटियों के लिए ध्वजांकित हो जाती हैं, क्योंकि यह नहीं देख सकती है कि लोम्बोक कैसे बना रहा है। नेटबीन्स कैश को साफ़ करने से समस्या हल हो जाती है। निश्चित नहीं है कि "क्लीन प्रोजेक्ट" विकल्प है जैसे कि ग्रहण में है। मामूली मुद्दा है, लेकिन यह ज्ञात करना चाहता था।
अद्यतन 5 (जनवरी 17 '14) लोम्बोक
हमेशा ग्रूवी या कम से कम के साथ अच्छा नहीं खेलता है groovy-eclipse-compiler
। आपको संकलक के अपने संस्करण को डाउनग्रेड करना पड़ सकता है।
मावेन ग्रोवी और जावा + लोम्बोक
अद्यतन 6 (जून 26 '14)
चेतावनी का एक शब्द। लोम्बोक थोड़ा नशे की लत है और अगर आप एक ऐसी परियोजना पर काम करते हैं जहां आप किसी कारण से इसका उपयोग नहीं कर सकते हैं, तो यह आपके बाहर पेशाब को परेशान करेगा। आप बेहतर हो सकता है बस इसका इस्तेमाल कभी न करें।
अद्यतन 7 (जुलाई 23 '14)
यह एक दिलचस्प अपडेट का एक सा है क्योंकि यह सीधे ओम्को के बारे में पूछे गए लोम्बोक को अपनाने की सुरक्षा को संबोधित करता है ।
V1.14 के रूप में, @Delegate
एनोटेशन को एक प्रायोगिक स्थिति में डिमोट किया गया है। विवरण उनकी साइट ( लोम्बोक डेलिगेट डॉक्स ) पर प्रलेखित हैं ।
बात यह है, यदि आप इस सुविधा का उपयोग कर रहे थे, तो आपके बैकआउट विकल्प सीमित हैं। मुझे इसके विकल्प दिखाई देते हैं:
- मैन्युअल रूप से
@Delegate
एनोटेशन निकालें और प्रतिनिधि कोड को जनरेट / हैंडकोड करें। यदि आप एनोटेशन के भीतर विशेषताओं का उपयोग कर रहे थे तो यह थोड़ा कठिन है।
- जिन फ़ाइलों में
@Delegate
एनोटेशन है उन्हें डिलीम्बोक करें और हो सकता है कि एनोटेशन में वापस जोड़ें।
- लोम्बोक को कभी भी अपडेट न करें या कांटा बनाए रखें (या अनुभवात्मक सुविधाओं का उपयोग करके जीवित रहें)।
- अपने पूरे प्रोजेक्ट को डिलीम्ब करें और लोम्बोक का उपयोग करना बंद करें।
जहां तक मैं बता सकता हूं, डेलम्बोक में एनोटेशन के सबसेट को हटाने का विकल्प नहीं है ; यह सब या कम से कम एक फ़ाइल के संदर्भ के लिए कुछ भी नहीं है। मैंने Delombok झंडे के साथ इस सुविधा का अनुरोध करने के लिए एक टिकट खोला , लेकिन मैं निकट भविष्य में इसकी उम्मीद नहीं करूंगा।
अद्यतन 8 (अक्टूबर 20 '14)
यदि यह आपके लिए एक विकल्प है, तो ग्रोवी, लोंबोक के अधिकांश समान लाभ प्रदान करता है, साथ ही अन्य सुविधाओं के एक नाव लोड @Delegate भी शामिल है । यदि आपको लगता है कि आपके पास शक्तियों को विचार बेचने में एक कठिन समय होगा, तो यह देखने के लिए @CompileStatic
या @TypeChecked
एनोटेशन पर एक नज़र डालें कि क्या यह आपके कारण की मदद कर सकता है। वास्तव में, ग्रूवी 2.0 रिलीज का प्राथमिक फोकस स्थिर सुरक्षा था ।
UPDATE 9 (1 सितंबर 15)
लोम्बोक को अभी भी सक्रिय रूप से बनाए रखा और बढ़ाया जा रहा है , जो गोद लेने के सुरक्षा स्तर के लिए बहुत अच्छा है। @Builder एनोटेशन मेरे पसंदीदा नई सुविधाओं में से एक है।
अद्यतन 10 (नवंबर 17 '15)
यह सीधे ओपी के सवाल से संबंधित नहीं लग सकता है, लेकिन साझा करने के लायक है। यदि आप अपने द्वारा लिखे गए बॉयलरप्लेट कोड की मात्रा को कम करने में मदद करने के लिए उपकरणों की तलाश कर रहे हैं, तो आप Google Auto - विशेष रूप से AutoVueue में भी देख सकते हैं । यदि आप उनके स्लाइड डेक को देखते हैं , तो समस्या के संभावित समाधान के रूप में लंबोक को हल करने की कोशिश कर रहे हैं। वे लोम्बोक के लिए जिस सूची को सूचीबद्ध करते हैं वह हैं:
- सम्मिलित कोड अदृश्य है (आप इसे उत्पन्न करने के तरीकों को नहीं देख सकते हैं) [एड नोट - वास्तव में आप कर सकते हैं, लेकिन इसके लिए केवल एक डिकॉम्पिलेटर की आवश्यकता होती है]
- कंपाइलर हैक गैर-मानक और नाजुक होते हैं
- "हमारे विचार में, आपका कोड अब वास्तव में जावा नहीं है"
मुझे यकीन नहीं है कि मैं उनके मूल्यांकन से कितना सहमत हूं। और ऑटोवाल्यू की सहमति को देखते हुए जो स्लाइड्स में प्रलेखित हैं, मैं लोम्बोक (यदि ग्रूवी एक विकल्प नहीं है) के साथ चिपके रहेंगे।
अद्यतन 11 (फरवरी 8 '16)
मुझे पता चला कि स्प्रिंग रूओ के कुछ समान एनोटेशन हैं । मुझे यह जानकर थोड़ी हैरानी हुई कि रूही अभी भी एक चीज है और एनोटेशन के लिए प्रलेखन ढूंढना थोड़ा कठिन है। निष्कासन भी de-lombok जितना आसान नहीं दिखता है। लोम्बोक सुरक्षित विकल्प की तरह लगता है।
अद्यतन 12 (फ़रवरी 17 '16)
इस परियोजना के लिए लोम्बोक में लाने के लिए सुरक्षित होने के औचित्य के साथ आने की कोशिश करते हुए मैं वर्तमान में काम कर रहा हूं, मैंने पाया कि सोने का एक टुकड़ा v1.14
- विन्यास प्रणाली के साथ जोड़ा गया था ! इसका मतलब है कि आप एक परियोजना को कुछ सुविधाओं को अस्वीकार करने की अनुमति देने के लिए कॉन्फ़िगर कर सकते हैं जो आपकी टीम असुरक्षित या अवांछनीय समझती है। बेहतर अभी तक, यह अलग-अलग सेटिंग्स के साथ निर्देशिका विशिष्ट कॉन्फ़िगरेशन भी बना सकता है। यह कमाल का है।
अद्यतन 13 (अक्टूबर 4 '16)
यदि इस तरह की बात आपके लिए मायने रखती है, तो ओलिवर गिएरेको लगा कि लोम्बोक को स्प्रिंग डेटा रेस्ट में जोड़ना सुरक्षित था ।
अद्यतन 14 (सितम्बर 26 '17)
जैसा कि ओप्स प्रश्न पर टिप्पणियों में @gavenkoa द्वारा बताया गया है , JDK9 संकलक समर्थन अभी तक उपलब्ध नहीं है (अंक # 985)। यह भी लगता है कि यह लोम्बोक टीम के लिए एक आसान तय नहीं है।
UPDATE 15 (26 मार्च 18)
लोम्बोक चेंगलॉग v1.16.20 के रूप में इंगित करता है " JDK1.9 पर लोमबेक का संकलन अब संभव है " भले ही # 985 अभी भी खुला है।
JDK9 को समायोजित करने के लिए परिवर्तन, हालांकि, कुछ टूटने वाले परिवर्तनों की आवश्यकता थी; सभी डिफ़ॉल्ट चूक में परिवर्तन के लिए अलग। यह थोड़ा सा है कि उन्होंने ब्रेकिंग परिवर्तन की शुरुआत की, लेकिन संस्करण ने केवल "इंक्रीमेंटल" संस्करण संख्या को टक्कर दी (v1.16.18 से v1.16.20 तक)। चूँकि यह पोस्ट सुरक्षा के बारे में थी, अगर आपके पास एक ऐसा yarn/npm
बिल्ड सिस्टम था जो स्वचालित रूप से नवीनतम वृद्धिशील संस्करण में अपग्रेड हो जाता है, तो आप असभ्य जागृति के लिए हो सकते हैं।
अद्यतन 16 (जनवरी 9 '19)
ऐसा लगता है कि JDK9 मुद्दों को हल कर दिया गया है और Lombok JDK10 के साथ काम करता है, और यहां तक कि JDK11 जहां तक मैं बता सकता हूं।
एक बात जिस पर मैंने गौर किया, वह यह थी कि सुरक्षा पहलू से संबंधित था तथ्य यह है कि परिवर्तन लॉग v1.18.2 से v1.18.4 तक जा रहा है, दो वस्तुओं को सूचीबद्ध करता है BREAKING CHANGE
? मुझे यकीन नहीं है कि एक सेमर "पैच" अपडेट में एक ब्रेकिंग परिवर्तन कैसे होता है। यदि आप किसी ऐसे उपकरण का उपयोग करते हैं जो ऑटो-अपडेट पैच संस्करणों का उपयोग करता है, तो यह एक समस्या हो सकती है।
javac
को आंतरिकsun.*
कक्षाओं ((