2015-01-26 8 views
7

को देखते हुए से मुख्य तर्क को एक्सेस करना:एक स्थिर प्रारंभकर्ता

public class MyClass { 

    static { 
    // Access to args is needed here 
    } 

    public static void main(String[] args) { 
    ... 
    } 
} 

मैं उपर्युक्त स्थिर ब्लॉक में आर्ग का उपयोग करना चाहते हैं।

मुझे पता है कि कक्षा को लोड (या प्रारंभिक) और स्थिर मुख्य कार्य से पहले स्थिर ब्लॉक निष्पादित किया जाता है, लेकिन अभी भी यह सोच रहा था कि क्या इसके तर्कों तक पहुंच बनाना संभव था या नहीं।

बीटीडब्ल्यू - मेरा अंतिम लक्ष्य लॉग 4j को कॉन्फ़िगर करने से पहले लॉग फ़ाइल के नाम पर लॉग फ़ाइल के नाम पर जोड़ना है (सिस्टम प्रॉपर्टी वैरिएबल का उपयोग करना जो कि मुख्य में पारित तर्कों में से एक से लिया गया है)।

+1

नहीं, लेकिन आप इस प्रणाली संपत्तियों पर सीधे भरोसा कर सकते हैं। – biziclop

उत्तर

4

स्थिर ब्लॉक के भीतर और यह पहुँच

java -Dmyvar=value ... 

वहाँ एक विशेष प्रणाली संपत्ति "सूरज है। java.command "जिसमें पूर्ण कमांड लाइन है।

यहाँ एक उदाहरण है:

static { 
    System.out.println(System.getProperty("sun.java.command")); 
} 

जब मैं तर्क के साथ मेरा कार्यक्रम भागा aaa bbb मैं निम्नलिखित उत्पादन मिल गया:

com.MyClass aaa bbb 
+0

बीटीडब्ल्यू - क्या आपको पता है कि यह वर्चुअल मशीन के कार्यान्वयन से स्वतंत्र है? –

+0

क्षमा करें, मैं यह उल्लेख करना भूल गया कि यह सूर्य/ओरेकल जेवीएम के लिए है। मेरा मानना ​​है कि यह ओपनजेडीके द्वारा समर्थित है और मुझे नहीं पता कि आईबीएम और जेरोकिट के बारे में क्या है। – AlexR

+0

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

4

आप स्थैतिक ब्लॉक से मुख्य के तर्कों तक पहुंच नहीं सकते हैं। इसके बजाय मुख्य तर्क पास करने का (या Inaddition), मैं सुझाव है कि आप की तरह सिस्टम पैरामीटर का उपयोग: जैसे

static { 
    String parameterValue = System.getProperty("myvar"); 
    ... 
} 
संबंधित मुद्दे