2013-05-05 2 views
7

कैसे प्रारंभ करें static, android.util.SparseArray का अपरिवर्तनीय उदाहरण कैसे शुरू कर सकता हूं?एक स्थैतिक स्पैरएरे

+1

आप स्थिर गुणों को प्रारंभ नहीं है। वास्तव में आप क्या करने की कोशिश कर रहे हैं? – Eric

+1

@ एरिक स्पैर्सएरे इस जवाब के बराबर http://stackoverflow.com/a/507658/884677 एक स्थिर मानचित्र के लिए – firyice

+1

@ एरिक हां, जैसा कि मैंने इस प्रश्न में कहा है, और लिंक किए गए प्रश्न/उत्तर – firyice

उत्तर

6

आप जो भी कर रहे हैं वह नहीं कर सकते हैं। कम से कम, आप इसे करने का प्रयास क्यों नहीं कर रहे हैं। SparseArray का कोई कार्यान्वयन नहीं है जो अप्राप्य है।

हालांकि, आप एक बना सकते हैं।

  • एक कक्षा बनाएं, CustomSparseArray<E> कहते हैं, और यह SparseArray का विस्तार किया है: यहाँ कैसे।
  • अवहेलना सभी तरीकों है कि इस तरह सरणी में तत्वों को परिवर्तित, और कुछ के साथ उन्हें बदल देते हैं:

    @Override 
    public void append(int key, E value) { 
        if (mLocked) 
         return; // Maybe throw an exception 
        super.append(key, value); 
    } 
    
  • फिर, एक सदस्य चर में वर्ग के लिए, boolean mLocked = false; जोड़ें।
  • इसके बाद, आप की तरह एक विधि की जरूरत है निम्नलिखित:

    public class Test { 
        private static final CustomSparseArray<Integer> myArray; 
        static { 
         myArray = new CustomSparseArray<Integer>(); 
         myArray.append(1, 1); 
         myArray.append(2, 5); 
         myArray.lock(); 
        } 
    } 
    

तो फिर तुम एक है:

public void lock() { mLocked = true; } 
  • अंत में, अपने स्थिर चर the other post में करने के लिए एक विधि का उपयोग कर समान लागू आपके static परिवर्तनीय myArray में unmodifiable SparseArray

  • +0

    यह वही है जो मैं खोज रहा था। धन्यवाद! – firyice

    15

    यहाँ एक बेहतर तरीका एक अनाम वर्ग का उपयोग कर रहा है:

    static final SparseIntArray myArray = new SparseIntArray() { 
        { 
         append(1, 2); 
         append(10, 20); 
        } 
    }; 
    
    संबंधित मुद्दे