捕获异常并终止程序

时间:2013-12-16 22:48:34

标签: java

我有一个事件,如果“windowok”== false,它会引发异常。这就是我构建事件的方式:

public class GreenhouseControls extends Controller {

    public class WindowMalfunction extends Event {

        private Boolean windowok = false;

        private void set(Boolean windowok) {
          this.windowok = windowok ;
        }

        public WindowMalfunction(long delayTime) {
              super(delayTime);
        }

        public void action() throws ControllerException {   
          if (!windowok) {
              throw new ControllerException("Window Malfunction", 1);
          }
        } 

        public String toString() {
          return "Windok OK = " + windowok;  
        }
   }
}

该异常在另一个名为Controller的类中被捕获,如下所示:

public class Controller {

    private List<Event> eventList = new ArrayList<Event>();
    private Long wait;

    public void addEvent(Event c) { 
        eventList.add(c); 
    }

    public void shutdown(Long wait) { 
        this.wait = wait;
    }

    public void run() {
       while(eventList.size() > 0)

       for(Event e : new ArrayList<Event>(eventList))
          if(e.ready()) {
              System.out.println(e);
          try {
              e.action();
          }
          catch(ControllerException ex) {
              shutdown();  // WHAT DO I DO HERE?
          }
          eventList.remove(e);
        }

}

我需要在Controller类中启动shutdown()方法来终止程序,但是我需要覆盖GreenhouseControls类中的shutdown()方法来实现这一点。我应该在GreenhouseControls类中重写这个方法,我应该在catch块中调用shutdown()方法,还是只启动一个将在GreenhouseControls类中调用重写方法的进程?

1 个答案:

答案 0 :(得分:1)

我只需在shutdown类中声明一个抽象方法Controller,该方法将由GreenhouseControls实现。

我不知道您的架构的细节,但是,如果有多个其他类扩展它,那么有一个抽象类Controller(无法实例化)可能会很好。我认为对于每种类型的控制器,关闭过程将是不同的,然后,通过使其抽象,您强制谁扩展Controller以实现自定义关闭过程。相反,如果关闭过程始终相同,则可以直接在Controller中实现。最后,如果某些预备程序对于所有类型的控制器都是通用的,则可以在shutdown()内部Controller类中实现它们,并通过调用super.shutdown();作为第一步来覆盖派生类中的方法。 / p>