实例化对象信息传输中的Java覆盖方法

时间:2016-05-04 20:47:28

标签: java override listener instantiation

请注意:我是这个主题的新手。

假设我有一个班级活动。

public class Event {
    //constructors, etc.

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

一个叫做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);
    }
}

在“感兴趣的区域”注释中,有什么方法可以在Event e调用pathFollowed(int location)时设置managerLocation的值。我的目标是当事件arraylist中的任何事件调用pathFollowed(int location)时,managerLocation将被设置为“location”(“location”指的是pathfollowed方法中的输入)。

我原本想要覆盖pathFollowed方法,但后来我意识到这是不可能的,因为当事件到达addEvent方法时,它已经被实例化并且不能以这种方式改变

提前致谢。

1 个答案:

答案 0 :(得分:0)

也许是某种听众模式?

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

这只是一个通用的例子,因为我不知道你的目的是什么,但也许它会让你思考。