Jako zwolennik tell don't ask chciałbym pokazać, jak można to zrobić bez pobierające.
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;
}
}
}
Wyjścia:
{bob=2, susan=5}
zauważyć jak DataStorage
ma wiedza o AnotherClass
s istnienia? Również AnotherClass
nie ma informacji o DataStorage
. Wszystko, co dzielą, to interfejs. Oznacza to, że możesz robić, co chcesz, w każdej z tych klas, o ile nadal będziesz wspierać ten interfejs.
BTW, klasy są tylko statyczne, ponieważ byłem leniwy, aby przenieść je do własnych plików. :)
zdefiniować zmienną globalną jako statyczny, a następnie będzie można uzyskać do niego dostęp z różnych klas. 'public static HashMap people = new HashMap ();' –