2016-05-04 15 views
0

Bitte beachten Sie: Ich bin neu in diesem Thema.Java-Override-Methode bei der Übertragung von instanziierten Objektinformationen

Angenommen, ich habe eine Klasse Event.

public class Event { 
    //constructors, etc. 

    public void pathFollowed(int location) { 
     //this method could be called at any time 
    } 
} 

Und eine Klasse namens EventManager.

public class EventManager { 
    private int managerLocation; 
    private ArrayList<Event> events; 
    public EventManager() { 
     events = new ArrayList<Event>(); 
    } 
    public void addEvent(Event e) { 
     //THIS IS THE AREA OF INTEREST 
     events.add(e); 
    } 
} 

Im „Bereich von Interesse“ Kommentar, ist es eine Möglichkeit, den Wert von managerLocation der Einstellung, wenn der Event e ruft pathFollowed (int Standort). Mein Ziel ist, dass, wenn eines der Ereignisse in der Ereignis-Arraylist pathFollowed (int location) aufruft, diese managerLocation auf "location" gesetzt wird ("location" bezieht sich auf die Eingabe in der Methode pathfollowed).

Ich dachte ursprünglich daran, die Methode pathFollowed zu übersteuern, aber dann erkannte ich, dass dies nicht möglich ist, da das Ereignis bei der addEvent-Methode bereits instanziiert und nicht geändert werden kann Weise.

Vielen Dank im Voraus.

Antwort

1

Vielleicht eine Art Hörermuster?

public class Event { 
    private List<PathListener> pls; //Or just one if you know you'll only need one 
    //constructors, etc. 

    public void pathFollowed(int location) { 
     //this method could be called at any time 
     for(PathListener pl : pls) 
      pl.notifyLocation(location); 
    } 

    public addPathListener(PathListener pl) { 
     pls.add(pl); 
    } 
} 

Eventmanager:

public class EventManager implements PathListener { 
    private int managerLocation; 
    private ArrayList<Event> events; 
    public EventManager() { 
     events = new ArrayList<Event>(); 
    } 
    public void addEvent(Event e) { 
     e.addPathListener(this); 
     events.add(e); 
    } 

    @Override 
    public notifyLocation(int location) { //Of the PathListener interface 
     managerLocation = location; 
    } 
} 

Dies ist nur eine Art-of-allgemeines Beispiel, weil ich weiß nicht, was Ihr Ziel ist es, aber vielleicht wird es bekommen Sie denken.