承認済, 差し戻し中, 実施中, 中断中, 終了 } /** * アクション */ enum Action { 承認, 差し戻し, 再申請, 取り下げ, 開始, 完了, 中止, 中断, 再開 } class ActionsByState { Map<状態, Set<アクション>> 状態遷移表 = Map.of( 審査中, Set.of(承認, 差し戻し), 承認済, Set.of(開始, 取り下げ), 差し戻し中, Set.of(再申請, 取り下げ), 実施中, Set.of(中断, 完了), 中断中, Set.of(再開, 中止), 終了, Set.of() ); Set<アクション> 可能なアクションの一覧(状態) { return 状態遷移表.get(状態); } boolean 妥当性(状態, アクション) { return 可能なアクションの一覧(状態) .contains(アクション); } } 設計ノート おそらく、複数の状態遷移モデ ルが混在している。 分割して整理するとなんらかの ブレークスルーがありそう。 if文/switch文を使わずに宣言的に記述