2015-03-22 7 views
9

से एक HashMap तक पहुँचना मैं अपने वर्ग शीर्षक DataStorage में एक hashmap है:एक अलग वर्ग

HashMap<String, Integer> people = new HashMap<String, Integer>(); 

people.put("bob", 2); 
people.put("susan", 5); 

मैं भिन्न कक्षा में इस HashMap में डेटा का उपयोग कर सकते हैं?

+2

से पहुँच hashmap डेटा के रूप में स्थिर वैश्विक चर को परिभाषित करने और फिर आप विभिन्न वर्गों से उस तक पहुंच सकेंगे। 'सार्वजनिक स्थैतिक हैश मैप <स्ट्रिंग, इंटीजर> लोग = नया हैश मैप <स्ट्रिंग, इंटीजर>(); ' –

उत्तर

6

एक उदाहरण चर के रूप में अपने HashMap बनाएँ और अपने वर्ग एपीआई में उस तक पहुंचने का तरीका प्रदान:

public class DataStorage { 
    private HashMap<String, Integer> people = new HashMap<String, Integer>(); 

    public HashMap<String, Integer> getPeopleMap() { 
     return people; 
    } 
} 

public class AnotherClass { 
     DataStorage x = new DataStorage();  

     private void someMethod() { 
      HashMap<String, Integer> people = x.getPeopleMap(); 
      //work with your map here... 
     } 
} 
1

आप इसे उपयोग कर सकते हैं:

DataStorage storage = new DataStorage(); 
HashMap<String, Integer> people = storage.people; 
+0

और सार्वजनिक। :) – CandiedOrange

+0

या एक ही पैकेज;) –

1

आप अपने HashMap सार्वजनिक कर सकते हैं या तो, या इसके लिए गेटटर बनाएं:

public HashMap<String, Integer> getPeople() { 
    return people; 
} 

तो आप डेटास्टोर के उदाहरण का उपयोग करके इसे एक्सेस कर सकते हैं आयु वर्ग, इस तरह:

DataStorage dataStorage = new DataStorage(); 
dataStorage.getPeople() 

या, आप भी दोनों गेटर और HashMap स्थिर बनाने यदि:

DataStorage.getPeople() 

संपादित करें: ध्यान दें, कि अपने उदाहरण चर विशेष रूप से पहुँच संशोधक नहीं दिया जाता है, तो , वे package पहुंच के लिए डिफ़ॉल्ट हैं, जिसका अर्थ है कि उन्हें उसी पैकेज में परिभाषित अन्य कक्षाओं से एक्सेस किया जा सकता है। पहुँच संशोधक के बारे में अधिक जानकारी के लिए documentation में पाया जा सकता है, यहाँ एक संक्षिप्त सारांश है:

पहुँच स्तर

Modifier Class Package Subclass World 
public   Y   Y  Y  Y 
protected  Y   Y  Y  N 
no modifier  Y   Y  N  N 
private   Y   N  N  N 
1

tell don't ask के एक अधिवक्ता मैं दिखाने के लिए कि यह कैसे किसी भी टिककर खेल बिना किया जा सकता चाहते हैं के रूप में।

public class TellDontAsk { 

    interface MapSetter { 
     public void setMap(Map map); 
    } 

    interface MapGiver { 
     public void giveMap(MapSetter acceptMap); 
    } 

    public static void main(String[] args) { 
     HashMap<String, Integer> people = new HashMap<String, Integer>(); 

     people.put("bob", 2); 
     people.put("susan", 5); 

     DataStorage ds = new DataStorage(); 
     ds.setMap(people); 

     AnotherClass ac = new AnotherClass(); 
     ds.giveMap(ac); 

     ac.displayMap(); 
    } 

    public static class DataStorage implements MapSetter, MapGiver { 
     private Map map; 

     @Override 
     public void setMap(Map map) { 
      this.map = map;    
     } 

     @Override 
     public void giveMap(MapSetter acceptMap) { 
      acceptMap.setMap(map); 

     } 
    } 

    public static class AnotherClass implements MapSetter { 
     private Map map; 

     public void displayMap() { 
      System.out.println(map); 

     } 

     @Override 
     public void setMap(Map map) { 
      this.map = map;    
     } 
    } 
} 

आउटपुट:

{bob=2, susan=5} 

सूचना कैसे DataStorageAnotherClass रों अस्तित्व का कोई ज्ञान है? न ही AnotherClassDataStorage के बारे में पता है। वे जो भी साझा करते हैं वह एक इंटरफेस है। इसका मतलब है कि आप किसी भी कक्षा में जो भी चाहें उसे करने के लिए स्वतंत्र हैं जब तक आप उस इंटरफ़ेस का समर्थन करते रहें।

बीटीडब्ल्यू, कक्षाएं केवल स्थिर हैं क्योंकि मैं उन्हें अपनी फाइलों में स्थानांतरित करने के लिए आलसी था। :)

+0

बहुत कम प्रभाव के लिए कोड की बहुत सी पंक्तियां ... यह सुपर-इंटरफ़ेस कोडिंग अपठनीय, केवल-लिखने वाला कोड होता है। – vojta

+1

@vojta एक प्लगइन के रूप में डेटास्टोर का इलाज करने में सक्षम होने का थोड़ा सा प्रभाव नहीं है। – CandiedOrange

0

यह eazy

public class ListDataStorage { 

      public static LinkedHashMap getHmapCashType(){ 

       LinkedHashMap<String, String> hMapCashType = new LinkedHashMap<String, String>(); 
       hMapCashType.put("A", "Cash"); 
       hMapCashType.put("B", "Credit"); 

       return hMapCashType; 
      } 
    } 

अन्य वर्ग

String value = ListDataStorage.getHmapCashType().get("A").toString() 
संबंधित मुद्दे