2009-02-11 10 views
39

मुझे अभी जावा 5 प्रोजेक्ट मिला है जिसमें यह त्रुटि है, मैंने जावा 5 और जावा 6 का उपयोग करने की कोशिश की, लेकिन यह अभी भी वहां है। यह किसी भी तरह से पहले काम करता था (चूंकि यह svn में था), मैं उस कंपाइलर त्रुटि को कैसे बाईपास कर सकता हूं?प्रारंभिक एनम फ़ील्ड को प्रारंभकर्ता के भीतर संदर्भित नहीं कर सकता है?

+0

यह अपने कोड erroring है कि – tddmonkey

+0

आप क्या कोशिश कर रहे हैं का एक छोटा सा कोड नमूना प्रदान कर सके पोस्ट करने के लिए मदद कर सकता है प्राप्त करने के लिए? –

+0

इस पर खेद है, मैंने इसे Google के माध्यम से पाया, लेकिन ऐसा लगता है कि निजी स्थिर अंतिम क्षेत्र एक आदिम प्रकार है। क्या किसी के पास कोई विचार है? – Norswap

उत्तर

70

त्रुटि को "बाईपास" न करें - यह वह नहीं करेगा जो आप चाहते हैं। अच्छे कारण के लिए त्रुटि है।

enum मान किसी अन्य स्थिर फ़ील्ड से पहले शुरू किए जाते हैं। आप एक नक्शे में सभी मूल्यों को जैसे चाहें कुछ करना चाहते हैं, किसी और सब कुछ के बाद एक स्थिर प्रारंभकर्ता में यह कार्य करें:

import java.util.*; 

public enum Foo 
{ 
    BAR, BAZ; 

    private static final Map<String, Foo> lowerCaseMap; 

    static 
    { 
     lowerCaseMap = new HashMap<String, Foo>(); 
     for (Foo foo : EnumSet.allOf(Foo.class)) 
     { 
      // Yes, use some appropriate locale in production code :) 
      lowerCaseMap.put(foo.name().toLowerCase(), foo); 
     } 
    } 
} 
+0

जॉन - क्या आपको पता है कि यह त्रुटि ग्रहण 3.3 में क्यों नहीं होती है लेकिन 3.4 में होती है? – tddmonkey

+3

क्या 'Foo foo: Foo.values ​​() 'के बजाय' Foo foo: EnumSet.allOf (Foo.class) 'का उपयोग करने के लिए ऊपर दिए गए उदाहरण में कोई कारण है? –

+1

@AbdullahJibaly: वास्तव में नहीं। वे मुझे बहुत समकक्ष हैं, मुझे लगता है। –

6

एक और तरीका है करने के लिए "बाईपास" यह, उदाहरण के लिए एक काउंटर की जरूरत है या कुछ प्रत्येक initalization पर चलने की जरूरत है, इसलिए की तरह, एक निजी स्थिर भीतरी वर्ग बनाने के लिए है:

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

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