会社組織で学ぶJavaの例外処理入門
Javaの例外処理についてサンプルプログラムを作ってみました。ここでは会社組織のおける部長(GeneralManager)、課長(SectionManager)、一般社員(Employee)クラスを作って組織的に仕事をする様子を実装してみます。
- GeneralManager
- 部長クラス。受け取った仕事を課長にお任せ(委譲)する。ただし、課長の対処しきれない仕事はどんな仕事でも片付ける。
- SectionManager
- 課長クラス。受け取った仕事を一般社員にお任せ(委譲)する。一般社員が対処しれない仕事に対処するが、それでも無理な仕事は部長にお返しする。
- Employee
- 一般社員クラス。受け取った仕事を処理する。無理な仕事は課長にお返しする。
- Task
- 仕事を表すクラス。仕事の名前と作業量を保持する。
- TaskOverException
- 対処しきれない仕事を表す例外クラス。
- Main
- maimメソッドを実装したクラス。
Javaプログラミング
まずは単純なTaskクラス、TaskOverExceptionクラスを作成し、次にEmployee、SectionManager、GeneralManagerクラスを作成します。そのあとMainクラスを作成して動作確認します。
Task
Taskクラスはタスク名と作業量を保持します。
package example; public class Task { private String name; private int volume; public Task(String name, int volume) { this.name = name; this.volume = volume; } public String getName() { return name; } public int getVolume() { return volume; } }
TaskOverException
TaskOverExceptionクラスは作業量超過を表す例外クラスです。
package example; public class TaskOverException extends Exception { }
Employee
Employeeクラスは作業量が5以下の仕事を処理します。作業量が多すぎる場合はTaskOverExceptionをスローします。
package example; public class Employee { public void execute(Task task) throws TaskOverException { if (task.getVolume() <= 5) { System.out.println("Employee#execute " + task.getName()); } else { throw new TaskOverException(); } } }
SectionManager
SectionManagerクラスは、Employeeクラスに処理を移譲します。SectionManagerはTaskOverExceptionを捕捉して処理します。このとき作業量が10以下の仕事を処理可能です。作業量が多すぎる場合はTaskOverExceptionをスローします。
package example; public class SectionManager { private Employee employee; public void setEmployee(Employee employee) { this.employee = employee; } public void execute(Task task) throws TaskOverException { try { employee.execute(task); } catch (TaskOverException e) { if (task.getVolume() <= 10) { System.out.println("SectionManager#execute " + task.getName()); } else { throw e; } } } }
GeneralManager
GeneralManagerクラスは、SectionManagerクラスに処理を移譲します。GeneralManagerはTaskOverExceptionを捕捉して処理します。
package example; public class GeneralManager { private SectionManager sectionManager; public void setSectionManager(SectionManager sectionManager) { this.sectionManager = sectionManager; } public void execute(Task task) { try { sectionManager.execute(task); } catch (TaskOverException e) { System.out.println("GeneralManager#execute " + task.getName()); } } }
Main
Mainクラスにはmainメソッドを実装します。
package example; public class Main { public static void main(String[] args) { GeneralManager generalManager = new GeneralManager(); SectionManager sectionManager = new SectionManager(); Employee employee = new Employee(); generalManager.setSectionManager(sectionManager); sectionManager.setEmployee(employee); Task smallTask = new Task("SmallTask", 1); generalManager.execute(smallTask); Task mediumTask = new Task("MediumTask", 10); generalManager.execute(mediumTask); Task largeTask = new Task("LargeTask", 100); generalManager.execute(largeTask); } }
実行結果
mainメソッドの実行結果は次のようになります。
Employee#execute SmallTask SectionManager#execute MediumTask GeneralManager#execute LargeTask
まとめ
自分で対処できない仕事は上司に報告するようにしましょう。