2009-04-23 7 views
15

java.lang.System कक्षा well-known properties की संख्या को परिभाषित करती है।जावा के पास जाने-माने सिस्टम प्रॉपर्टी नामों के लिए स्थिरांक क्यों नहीं है?

उदाहरण के लिए, यदि आप "java.io.tmpdir" संपत्ति ऊपर देखकर भी JVM के अस्थायी निर्देशिका प्राप्त कर सकते हैं:

... = System.getProperty("java.io.tmpdir"); 

क्या मुझे समझ नहीं आता है कि क्यों इन गुणों स्थिरांक के रूप में परिभाषित नहीं कर रहे हैं (उदाहरण के लिए java.lang.System वर्ग में)। यह शाब्दिक स्ट्रिंग्स का उपयोग करने से बहुत कम त्रुटि-प्रवण होगा। दूसरे शब्दों में, मैं यह करने में सक्षम होना चाहता हूं:

... = System.getProperty(System.JAVA_IO_TMPDIR); 

कोई विचार क्यों नहीं किया गया था? इसे पीछे की संगतता को तोड़ने के बिना जावा की भावी रिलीज में भी जोड़ा जा सकता है। या क्या मुझे कुछ याद आ रही है?

+2

मैंने जो किया है वह स्वयं को क्रेट करना है। इसमें लगभग 30 सेकंड लगते हैं। my.package.SystemProperties और वहां स्थिरांक जोड़ें। और फिर मेरी आईडीई मुझे वहां से मदद करें। – OscarRyz

+2

> मैंने जो किया है वह मेरे लिए क्रेट (एसआईसी) है। और आपने कोई टाइपो नहीं बनाया है? :-) यह दर्शाता है कि सूर्य को प्रत्येक व्यक्ति डेवलपर को छोड़ने के बजाय एक बार ऐसा क्यों करना चाहिए था। लोग इंसान हैं और गलतियां करते हैं। –

+0

नहीं, 0 टाइपो। मैं उन्हें पेस्ट कॉपी करता हूं और केवल उन मानों को जोड़ता हूं जो मैं उपयोग करता हूं (जो आम तौर पर केवल 4 के आसपास होते हैं) :-) – OscarRyz

उत्तर

9

System.getProperties() के तहत प्रलेखित सभी गुण मानकीकृत हैं - प्रत्येक जावा एसई कार्यान्वयन उन्हें प्रदान करना होगा। ऐसा कोई कारण नहीं है कि जावा 7 इन मानक संपत्ति नामों के लिए स्थिरांक पेश नहीं कर सका। यह नई संपत्तियों के परिचय को रोक नहीं पाएगा। मुझे लगता है कि यह सिर्फ किसी ने भी प्रयास के लायक नहीं सोचा है (यहां तक ​​कि कोर जावा एपीआई के लिए भी मामूली जोड़ों को मुझे लगता है कि प्रक्रियाओं के माध्यम से जाना है)।

9

मेरा अनुमान है कि सूर्य सिस्टम गुणों के पूर्वनिर्धारित सेट पर प्रतिबद्ध नहीं होना चाहता था। यदि उन्हें contants के रूप में परिभाषित नहीं किया गया है, तो वे किसी भी समय सिस्टम गुण जोड़ सकते हैं (भले ही वे केवल 1.4.1 से 1.4.2 तक जेडीके का एक वृद्धिशील संस्करण जारी करें)।

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

+1

+1 सबसे निश्चित रूप से। – OscarRyz

+0

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

+1

@Andrew: क्योंकि इस तरह java.lang.System का स्रोत कोड मेजबान सिस्टम की संपत्ति/कुंजी मानों से पूरी तरह से decoupled है। – OscarRyz

-5

"literal" और LITERAL के बीच क्या अंतर है?

दो वर्ण: " और "

एस के जटिल सेट का आविष्कार क्यों परेशान नहीं कर सकता है जब "literal" बस काम करता है।

+12

अंतर यह है कि संकलक आपको बता सकता है कि क्या लिटरल में एक टाइपो है लेकिन यदि "लिटरल" में कोई टाइपो नहीं है। – jmucchiello

+4

प्लस, आईडीई स्वतः पूर्ण हो सकता है, इसलिए आपको मूल्यों को मुद्रित करने के लिए पहले एक छोटा प्रोग्राम बनाने की आवश्यकता नहीं है और फिर परिणाम को कोड में कॉपी/पेस्ट करें। – OscarRyz

+6

क्योंकि मुझे रनटाइम की तुलना में संकलन समय पर त्रुटियों को बहुत अधिक लगता है! –

4

प्रणाली संपत्तियों के लिए भयानक Google Guava library शुरू की स्थिरांक हाल ही में: देखो http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/StandardSystemProperty.html

+0

प्रश्न का उत्तर नहीं देता है (जो शायद वैसे भी अप्रत्याशित है, जब तक गोस्लिंग एट अल द्वारा), लेकिन मैंने आपको वोट दिया है क्योंकि यह सहायक है! :-) –

1

पूर्णता के लिए, अपाचे कॉमन्स लैंग SystemUtils वर्ग जो आम स्थिरांक और पूर्वनिर्धारित तरीके प्रदान की है।

यह कई सालों से मौजूद है और संभावनाएं अच्छी हैं कि आप पहले ही कॉमन्स लैंग (2 या 3) का उपयोग कर रहे हैं।

SystemUtils.getUserHome(); 
SystemUtils.getJavaIoTmpDir(); 
SystemUtils.JAVA_IO_TMPDIR; 
SystemUtils.USER_HOME; 
संबंधित मुद्दे