2009-12-18 7 views
5

क्या यह घोषणा करने के लिए कोई टिप्पणी है कि जावाडॉक्स में एक निश्चित विधि शामिल नहीं की जाएगी, भले ही यह सार्वजनिक हो?JavaDocs को अक्षम करने के लिए एनोटेशन

कुछ की तरह:

@nojavadocs 
public void foo(){ 
//... 
} 

पी.एस. मैं एपीआई के बारे में यहां बिंदु को समझता हूं, लेकिन विधियां बस "असमर्थित" हैं। वे काम करते हैं (और अन्य पैकेजों से पहुंच के लिए सार्वजनिक होना चाहिए), लेकिन हम उनको दस्तावेज करने और उन्हें उपयोग करने के तरीके के बारे में सवालों के जवाब देने के लिए परेशान नहीं करना चाहते हैं जब उनकी कार्यक्षमता समर्थित उपयोग परिदृश्यों के लिए प्रासंगिक नहीं है। अच्छे डिजाइन का अर्थ उन्हें किसी अन्य वर्ग में ले जाना है, लेकिन वे तर्कसंगत रूप से कक्षा में डेटा का संदर्भ लेते हैं।

उत्तर

4

यदि आप सूर्य के जावाडॉक्स टूल का उपयोग नहीं कर रहे हैं।

वे इसे के लिए a feature request है, लेकिन आप इस पर काबू पाने के लिए, या एक 3-पक्ष उपकरण (DocFlex या इस तरह) का उपयोग करने के लिए एक कस्टम doclet लिख सकते हैं यह 1997 से

कम प्राथमिकता में हो गया है।

+1

सुनना अच्छा है कि एक सुविधा अनुरोध है - कम से कम मैं केवल एकमात्र डमी नहीं हूं :-) –

4

हाँ ... लेकिन एक अच्छे तरीके से नहीं (ऐसे तरीके हैं जो सार्वजनिक हैं जो वास्तव में "सार्वजनिक" नहीं हैं, एक महान डिजाइन अभ्यास नहीं है)।

आप this thread में दिए गए सुझावों का पालन कर सकते हैं और @deprecated का उपयोग करके विधि को चिह्नित कर सकते हैं, जब आप javadoc उपयोग विकल्प -nodeprecated चलाते हैं।

संपादित करें: जैसा कि अन्य ने ध्यान दिया है, यह कार्रवाई का वांछनीय तरीका नहीं है। इससे आपकी समस्या हल हो जाएगी, लेकिन आपको वास्तव में पुनर्विचार करने की आवश्यकता है कि आप विधि को छिपाना क्यों चाहते हैं - आपके कोड का एक संकलित संस्करण दिया गया है, फिर भी कोई भी आपके फ़ंक्शन को देख पाएगा; दस्तावेज़ीकरण में इसे छुपाकर वास्तव में विधि को छुपा नहीं है। मुझे वास्तव में यहां तनाव देना है कि क्वालीफायर private, public और protected का अर्थ है जिसका आपको प्रभावी ढंग से विचार करना चाहिए और उपयोग करना चाहिए। ऐसी कोई चीज़ नहीं है जैसे "छुपा" public विधि

+0

यह काम करेगा, और एक चालाक समाधान है, लेकिन यह एक समस्या है कि आप बहिष्करण एनोटेशन का दुरुपयोग कर रहे हैं, इसलिए आप कोड "इसका मतलब" से मेल नहीं खाते हैं। कम से कम मैं विधियों पर टिप्पणी करता हूं और स्पष्ट रूप से समझाता हूं कि मैं यह अजीब कुछ क्यों कर रहा था। उपकरण (उदा।ग्रहण) बहिष्कृत तरीकों के उपयोग के लिए चेतावनी ध्वजांकित करेगा (हालांकि आप उन चेतावनियों को अनदेखा कर सकते हैं)। –

+0

मैं इस रणनीति के उपयोग की वकालत नहीं कर रहा हूं - स्पष्ट रूप से यहां एक बड़ी समस्या है और @ डीप्रैकेटेड चिह्नित करने के प्रभाव बेहद अवांछित हो सकते हैं, लेकिन यह ओपी की आवश्यकताओं को पूरा करता है। जावा फ़ोरम पर जो थ्रेड मैंने लिंक किया है, वैसे ही सुझाव देता है कि आप ऐसा करते हैं कि भ्रम से बचने के लिए विधि को स्पष्ट रूप से टिप्पणी की जानी चाहिए। –

6

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

यदि आप कक्षा या कुछ उपयोगकर्ताओं के बाहर अप्रयुक्त होने की विधि चाहते हैं, तो इसे निजी या पैकेज बनाएं। यदि यह असुविधाजनक है और यह सार्वजनिक होना चाहिए, तो मैं संभवतः नामकरण सम्मेलन के साथ इसकी उपयोग पर सीमाओं को स्पष्ट रूप से दस्तावेज करता हूं (उदाहरण के लिए, पायथन यह करता है, अंडरस्कोर से घिरे इकाई नाम हैं, जिन्हें आप देख सकते हैं लेकिन हैं सार्वजनिक एपीआई की तुलना में कक्षा कार्यान्वयन का अधिक हिस्सा होने के लिए)

2
/** 
* Don't use this method <br> 
* <i>or all your data will be lost.</i> 
*/ 
public void foo(){ 
    //... 
} 

अच्छी तरह से, एक बेहतर स्पष्टीकरण का उपयोग क्यों उपयोगकर्ता इस विधि का उपयोग नहीं करना चाहिए ...
याद रखें कि यह किसी भी (सार्वजनिक) विधि एक decompiler या प्रतिबिंब का उपयोग कर खोजने के लिए मुश्किल नहीं है।