2015-03-22 29 views
9

Ich habe einen hashmap in meiner Klasse betitelt Datastorage:Zugriff auf eine HashMap aus einer anderen Klasse

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

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

Wie kann ich die Daten in diesem HashMap in einer anderen Klasse zugreifen?

+2

es als statischen globalen Variable definieren und dann können Sie für den Zugriff aus verschiedenen Klassen. 'public static HashMap people = new HashMap ();' –

Antwort

6

Erstellen Sie Ihre HashMap als Instanzvariable und ein Verfahren bereitzustellen, das in der Klasse API zuzugreifen:

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

Sie können darauf zugreifen:

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

Und public. :) – CandiedOrange

+0

Oder gleiches Paket;) –

1

Sie können entweder Ihre HashMap öffentlich machen, oder erstellen Sie einen Getter dafür:

dann können Sie über eine Instanz des DataStor darauf zugreifen Altersklasse, wie folgt aus:

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

oder, wenn man auch sowohl die Getter machen und die HashMap statisch:

DataStorage.getPeople() 

EDIT: Beachten Sie, dass, wenn Ihre Instanzvariablen sind nicht speziell Zugriffsmodifikatoren gegeben Standardmäßig haben sie Zugriff auf package, was bedeutet, dass auf sie von anderen Klassen zugegriffen werden kann, die in demselben Paket definiert sind. Mehr Details über Zugriffsmodifikatoren in den documentation gefunden werden, hier eine kurze Zusammenfassung:

Zugriffsebene

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

Als Verfechter von tell don't ask Ich mag würde zeigen, wie diese kann ohne Getter erfolgen.

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;    
     } 
    } 
} 

Ausgänge:

{bob=2, susan=5} 

Beachten Sie, wie DataStorage keine Kenntnissen auf AnotherClass Existenz hat? Noch kennt AnotherClass über DataStorage. Sie teilen nur eine Schnittstelle. Das heißt, Sie können in jeder Klasse tun, was Sie wollen, solange Sie diese Schnittstelle unterstützen.

BTW, die Klassen sind nur statisch, weil ich zu faul war, sie in ihre eigenen Dateien zu verschieben. :)

+0

Zu viele Codezeilen für zu wenig Wirkung ... Diese Super-Interface-Codierung führt zu unlesbarem, schreibgeschütztem Code. – vojta

+1

@vojta in der Lage, den Datenspeicher als ein Plugin zu behandeln ist kein kleiner Effekt. – CandiedOrange

0

Dies ist 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; 
      } 
    } 

Zugang hashmap Daten von einer anderen Klasse

String value = ListDataStorage.getHmapCashType().get("A").toString() 
Verwandte Themen