2010-10-15 14 views
7

में इंटरफेस नामकरण के लिए मानक क्या है, मुझे जावा एपीआई में Throwable कक्षा के बारे में एक सहयोगी ने पूछा है।जावा एपीआई

मानक के अनुसार, मैं समझता हूं, हर शब्द समाप्त * सक्षम जावा एपीआई में एक इंटरफ़ेस है। इंटरफ़ेस नामों जैसे शब्दों का उपयोग करने के बारे में एक उद्योग मानक है। तो, मैं अनजाने में, जावा दुनिया में सभी अपवाद और त्रुटि प्रकारों के लिए बेस इंटरफेस के रूप में उसे बताया। फिर वह मुझे इस कक्षा के लिए जावा फ़ाइल दिखाता है।

मेरे सवालों का:

  1. क्यों जावा लोग इस नाम चुना गया है एक वर्ग होने के लिए। मुझे लगता है कि यह डिफ़ॉल्ट रूप से एक इंटरफ़ेस होना चाहिए था?

  2. क्या यह सक्षम है * सक्षम शब्दों को इंटरफ़ेस के रूप में उपयोग करने के लिए?

  3. क्या कक्षा के साथ समाप्त होने वाले वर्ग का कोई अन्य उदाहरण है?

सम्मान।

+1

सीरियलज़ेबल, इटेबल, तुलनात्मक, रननेबल, कॉल करने योग्य। सभी सुंदर अक्सर इस्तेमाल इंटरफेस। – Thilo

+0

@ थिलो: वे वास्तव में इंटरफेस हैं। मैं इस तरह के तरीकों को समाप्त करने वाले वर्गों की तलाश में हूं। –

उत्तर

20

जावा के इंटरफेस होने के लिए उन '-टेबल' नामों के लिए बहुत आम बात है, लेकिन इंटरफ़ेस नामकरण के लिए कोई आधिकारिक सम्मेलन नहीं है जो मुझे पता चला है कि '-able' नाम इंटरफेस नाम होना चाहिए, हालांकि आम तौर पर मामला है

सरकारी जावा नामकरण सम्मेलनों यहां पाया जा सकता - यह बहुत दुबला है, वहाँ वास्तव में वर्ग या अंतरफलक के नामकरण के लिए कोई प्रतिबंध नहीं कर रहे हैं:

अपने Throwable सवाल, जेम्स के रूप में गोस्लिंग ने एक बार जवाब दिया कि यह इंटरफ़ेस की बजाय कक्षा क्यों है, भले ही नाम इंटरफ़ेस के लिए अधिक उपयुक्त था।

दुर्भाग्य से, सूर्य/Oracle की साइट से मूल लेख इंटरनेट आकाश में गायब हो गया है, इसलिए मैं केवल अप्रत्यक्ष संबंध प्रदान कर सकते हैं:

संपादित करें: मैं के बाद से इस प्रश्न को अपवर्तित करना जारी रखें, मुझे Wayback Machine के माध्यम से सूर्य चर्चा का लिंक मिला, यहां: http://web.archive.org/web/20071013225816/http://java.sun.com/features/2002/03/gosling.html?source=jdc_news&date=20020430

जेडीसी: क्यों एक इंटरफेस फेंकने योग्य नहीं है? नाम का सुझाव है कि यह होना चाहिए था। प्रकारों को पकड़ने में सक्षम होने के नाते, यानी कुछ वर्गों की बजाय {} पकड़() की कोशिश करें। इससे जावा प्रोग्रामिंग भाषा अधिक लचीला हो जाएगी।

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

+1

+1 जेजी से बड़ी जानकारी मैंने पहले नहीं देखी थी इंटरनेट पर अच्छी घड़ी रखने के लिए –

+0

+1, आपके उत्तर के लिए धन्यवाद। –

+0

वास्तव में अच्छा लगता है! – RecursiveExceptionException

29

कक्षाओं का नाम हमेशा नामों के नाम पर उपयोग किया जाता है, लेकिन थ्रोबल एक अपवाद है।

(देखें क्या मैं वहाँ था?)

+1

"हमेशा" जैसे शब्दों से सावधान रहें। * संग्रह *, * मानचित्र *, * सेट *, * सूची *, ... एक शब्द चाहिए। लेकिन हाँ, मैंने देखा कि आपने क्या किया :) –

+12

pun = 8-) – Yuval

+5

शायद थ्रोवेबल एक त्रुटि है: डी – mschonaker

0

हम यहाँ के बारे में नामकरण सम्मेलनों बात कर रहे हैं और हाँ, * सक्षम इंटरफेस नामकरण के लिए पसंदीदा सम्मेलन है। जैसा कि मुझे यकीन है कि आपने देखा है, हमेशा अपवाद होते हैं। उदाहरण के लिए, System.arraycopy ऊंट काजू नहीं है। सक्षम -

2

दूसरों ऐसे

के रूप में और निश्चित रूप से वहाँ इंटरफ़ेस में समाप्त नहीं के बहुत सारे हैं। कुछ लोग समायोज्य के बजाय 'I' (IAdjustable के साथ अपने सभी इंटरफ़ेस नामों को उपसर्ग करना पसंद करते हैं)। कोड स्वरूपण युद्धों की तरह, उनका सार्वभौमिक समझौता नहीं है। सूर्य में suggestions है लेकिन वे बहुत अस्पष्ट हैं।

2
  1. इंटरफ़ेस नाम हमेशा एक विशेषण होना चाहिए और यदि संभव हो तो "सक्षम" में समाप्त होना चाहिए जावा समुदाय के भीतर नामकरण की परंपरा में प्रवृत्ति किया गया है। इसे सख्ती से पालन करने की ज़रूरत नहीं है, यह सिर्फ एक नामकरण सम्मेलन है, जो भी आप चाहते हैं इंटरफ़ेस/कक्षा नामकरण से रोकने के लिए कुछ भी नहीं है।

  2. हाँ,, http://www.iwombat.com/standards/JavaStyleGuide.html#Class%20and%20Interface%20Names

  3. Clonable

विशेषण * नोट, इंटरफेस नाम आम तौर पर होना चाहिए देखने के वर्ग के नाम आम तौर पर संज्ञाओं होना चाहिए जबकि।

सूर्य द्वारा जारी इस स्टाइल गाइड दस्तावेज़ के पेज 15 को देखें। http://java.sun.com/docs/codeconv/CodeConventions.pdf

कुछ बहस भी है कि यह अंतर है कि मैं इंटरफेस के लिए पत्र जोड़ने के लिए एक अच्छी शैली है। (उदाहरण: आईसीएट, आईडीओजी, इत्यादि), लेकिन यह आमतौर पर अन्य भाषाओं पर लागू होता है, न कि जावा प्रति कहने के लिए।

मेरी व्यक्तिगत राय में एक सम्मेलन सिर्फ "अंगूठे का नियम" है, यदि सम्मेलन आपके कोड की पठनीयता के रास्ते में आता है, तो सम्मेलन का पालन करने वाले व्यक्ति के बजाय एक और वर्णनात्मक इंटरफ़ेस/वर्ग नाम के साथ जाएं, लेकिन यदि आप वास्तव में एक अच्छी वर्णनात्मक कक्षा के नाम के साथ आने के लिए संघर्ष कर रहे हैं, तो शायद आपको अपने वर्ग/इंटरफ़ेस की कार्यक्षमता के बारे में कुछ और सोचने की आवश्यकता है।

+0

आपका मतलब है: क्लोनेबल, अन्य जावा एपीआई में प्रतीत नहीं होते हैं। –

+0

@ विजय.शद: धन्यवाद, मेरा बुरा, सही। –