2010-01-15 14 views
5

मैं सिर्फजावा: एक सामान्य स्थिर int = 1 का उपयोग केवल सामान्य 1 से बेहतर है?

readParamString(Object params, int index) 

की तरह एक वर्ग (एक बड़ा एपीआई मॉड्यूल), जहां सामान का बहुत कुछ देखा है और वे 10 क्षेत्रों

final static int PARAM1 = 1 
... 
final static int PARAM10 = 10 

जो readParam कार्यों के साथ इस्तेमाल किया जा रहा है कि कक्षा में है

लेकिन आप यह भी तरह readParamString(o, 1);

एक सामान्य पूर्णांक का उपयोग कर सकते अंतिम स्थिर पूर्णांक किसी भी तरह बेहतर टी है एक सामान्य int का उपयोग कर हन?

उत्तर

1

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

+5

ज्यादा असंख्य? –

+0

इनमें से कोई भी चीज जावा में int अक्षर के लिए उपयुक्त नहीं है, सिवाय इसके कि निरंतर मान का अर्थ कुछ है (जिसे 'PARAM1' के विपरीत' NUMBER_OF_WOGGLES_IN_A_BOGGLE' नाम से संकेत दिया जाएगा) – Injektilo

1

हाँ किसी भी तरह एक सामान्य पूर्णांक

का उपयोग कर की तुलना में बेहतर लेकिन आप जावा 5 का उपयोग कर रहे हैं या बाद में enum की तुलना में बेहतर final static चर है।

+0

"स्थैतिक अंतिम int" दृष्टिकोण अभी भी उपयोगी है यदि आप एक-पूर्ण एन्कोडिंग (जिसमें आप थोड़ा सा-या अलग-अलग मान एक साथ) का उपयोग करके एक ही पूर्णांक में एकाधिक मान एन्कोड करना चाहते हैं। – Adamski

+0

इस विशिष्ट मामले में, अंतिम स्थिरता पूरी तरह से बेकार हैं। – jarnbjo

+2

@Adamski: एक वास्तविक ओओ दृष्टिकोण के लिए मैं पुराने स्कूल bitwise- या दृष्टिकोण के बजाय 'EnumSet' की सिफारिश करता हूं। –

15

एक स्थिर अंतिम स्थिर घोषित करने का एक लाभ कोड के समान साक्षर मूल्य के कई संदर्भों को रोकने के लिए है, जो संभावित रूप से अवांछित भिन्नता का कारण बन सकता है; जैसे यदि कोई प्रोग्रामर अनजाने में दूसरों को बदलने के बिना एक शाब्दिक परिवर्तन करता है।

आपके उदाहरण में, मैं मान 1 के साथ निरंतर PARAM1 घोषित करने के मूल्य पर सवाल उठाता हूं, खासकर अगर यह कक्षा के लिए निजी है और केवल एक बार संदर्भित है। हालांकि, शाब्दिक मूल्य के लिए कुछ अर्थपूर्ण अर्थ था तो यह अधिक उपयोगी हो सकता है; जैसे

public static final int LOAD_ACTION = 1; 
public static final int SAVE_ACTION = 2; 
public static final int DELETE_ACTION = 4; 
public static final int MOVE_ACTION = 8; 

हालांकि, आम तौर पर इस दृष्टिकोण के बजाय एक enum का उपयोग किया जाएगा।

+2

लेकिन अगर 1 का मान बदलता है तो क्या होगा ?! –

+0

@ जॉन: मेरा मुद्दा यह है कि यदि PARAM1 केवल क्लास के लिए निजी कोड में एक ही स्थान पर उपयोग किया जा रहा है तो इसे परिभाषित करने में बहुत कम मूल्य है। स्थिर अंतिम स्थिरांक का अत्यधिक उपयोग कोड को पढ़ने योग्य IMHO बना सकता है। – Adamski

+2

+1, कोड में जादू संख्या हमेशा उन्हें एक पठनीय अर्थपूर्ण नाम के साथ परिभाषित करने के लिए परिभाषित किया जाना चाहिए। – Paolo

-2

शायद ऐसा इसलिए है क्योंकि चर कंपाइलर द्वारा रेखांकित किया गया है।

4

उदाहरण में आप देते हैं, मैं कहूंगा कि नामित मान सीधे int का उपयोग करने से बेहतर नहीं हैं। पैरामीटर एक गिनती है, इसलिए पैरामीटर का int प्रतिनिधित्व नामित संस्करण के रूप में वर्णनात्मक है।

यह जब मैं कभी कभी सी कोड वहाँ वास्तव में बहुत ज्यादा नहीं बिंदु की तरह

#define ZERO 0 
#define ONE 1 

बातें है कि पार चलो तरह की तरह हो रहा है। असल में, जब मैं उन नामों को इस्तेमाल करता हूं (जब मैं परिभाषाओं को देख रहा हूं), मैं यह सुनिश्चित करने के लिए परिभाषित करता हूं कि नाम झूठ नहीं बोल रहे हैं (यह एक लंबा, लंबा समय है, लेकिन, मैं वास्तव में उस कोड में आया हूं जिसने FALSE को 1, -1 या कुछ गैर-शून्य परिभाषित किया है, उदाहरण के लिए, जो वास्तव में वास्तव में खराब है)।


संपादित करें: दूसरा रूप पर, ऐसा लगता है कि नाम का संकेत हो सकता है कि पहले पैरामीटर हित में होते हैं, जिस स्थिति में नामों में बहुत मतलब हो सकता है में जो क्षेत्र - जब तक नाम कुछ सार्थक टाई है केवल संख्यात्मक ऑफ़सेट के बजाय क्षेत्र में। यह कहना मुश्किल है कि यह मामला है या नहीं, क्योंकि आप उस कोड को स्पष्ट कर सकते हैं जिसके साथ आप वास्तव में काम कर रहे हैं।

9

यह मूर्खतापूर्ण है।

संख्यात्मक स्थिरांक निकालने का कारण उन्हें एक बताना नाम देना है। PARAM1..PARAM10 बहुत नहीं बता रहे हैं।

+0

+1 पढ़ने के लिए इंडेक्स के रूप में उपयोग किए जाते हैं। संदर्भों को ट्रैक करने का एक और कारण हो सकता है, और उन्हें एक ही स्थान पर बनाए रखने में सक्षम होना चाहिए। लेकिन एक सार्थक नाम भी बेहतर होगा। – Thilo

+0

ध्यान दें कि मूर्ख नामों का एक ही उद्देश्य हो सकता है, अर्थात् जावाडॉक के साथ उनके उपयोग को दस्तावेज करने में सक्षम होना। –

1

मुझे लगता है कि यह अंतिम स्थैतिक चर के लिए नहीं किया गया है लेकिन नाम बता रहा है। और यहां तक ​​कि PARAMETER1 भी 1 से अधिक कह रहा है। कोड पढ़ने के दौरान समझ में सुधार हो सकता है।

संबंधित मुद्दे