お疲れ様です。はるさらと申します。
業務システムやツール開発で「固定値の管理」をenumで行い、
対応する複数の値を2次元配列でまとめたい場面は意外と多いです。
この記事では 「enum × 2次元配列」 の組み合わせ方を、
サンプルコード付きでわかりやすく解説します。
enumを配列で扱う際の注意点や実務的な利用例、
代替手法もあわせて紹介します。
enumと2次元配列を組み合わせる基本構造
まずは基本的なイメージを掴んでおきましょう。
「enum」は定数をグループ化するのに便利ですが、
単独では複数の値を持つことができません。
そのため、2次元配列を使ってenumごとのデータをまとめて管理することが可能です。
基本サンプルコード
public class EnumArrayBasic {
enum Weekday {
MON, TUE, WED, THU, FRI
}
public static void main(String[] args) {
String[][] schedule = {
{"会議", "資料作成"},
{"開発", "レビュー"},
{"テスト", "設計"},
{"ドキュメント整理", "定例会"},
{"報告書作成", "チーム会議"}
};
for (int i = 0; i < Weekday.values().length; i++) {
System.out.println(Weekday.values()[i] + " : " + String.join(", ", schedule[i]));
}
}
}
実行結果
MON : 会議, 資料作成
TUE : 開発, レビュー
WED : テスト, 設計
THU : ドキュメント整理, 定例会
FRI : 報告書作成, チーム会議
解説
Weekday.values()でenumのすべての定数を配列として取得しています。- 2次元配列の行とenumの定義順が対応しており、indexの整合性が重要です。
- 経験の浅い方は、enumと配列の「並び順」をズラしてしまうミスに注意が必要です。
実務での利用例:enumごとに複数の値を持たせる
業務システムなどでは「定数ごとに複数の属性を持たせたい」というケースが多いです。
たとえば、「商品カテゴリ(enum)」ごとに「コード」「説明」「在庫状態」などを
保持したい場合です。
サンプルコード
public class EnumArrayPractical {
enum ProductType {
FOOD, BOOK, TOOL
}
public static void main(String[] args) {
String[][] productInfo = {
{"F001", "食品", "在庫あり"},
{"B001", "書籍", "在庫少"},
{"T001", "工具", "在庫なし"}
};
for (int i = 0; i < ProductType.values().length; i++) {
String[] info = productInfo[i];
System.out.printf("%s (%s): %s [%s]%n",
ProductType.values()[i],
info[0], info[1], info[2]);
}
}
}
実行結果
FOOD (F001): 食品 [在庫あり]
BOOK (B001): 書籍 [在庫少]
TOOL (T001): 工具 [在庫なし]
解説
- enumをキー的に使いながら、2次元配列で属性をまとめています。
- Javaではenum自体にもフィールドを持たせることができますが、
「2次元配列で管理する」ことで柔軟なデータ操作(更新や外部入力) が可能になります。 - 外部ファイル(CSVや設定ファイル)から配列を生成してenumに紐づける、
といった運用も現場でよく見られます。
代替手法:enumに配列やリストを直接持たせる
2次元配列を外部で管理するのではなく、
enum自体に情報を埋め込む方法もあります。
この方法は静的なデータ構造を定義する場合に向いています。
サンプルコード
public class EnumWithArray {
enum Role {
ADMIN(new String[]{"追加", "削除", "更新"}),
USER(new String[]{"閲覧", "コメント"}),
GUEST(new String[]{"閲覧のみ"});
private final String[] permissions;
Role(String[] permissions) {
this.permissions = permissions;
}
public String[] getPermissions() {
return permissions;
}
}
public static void main(String[] args) {
for (Role r : Role.values()) {
System.out.println(r + " : " + String.join(", ", r.getPermissions()));
}
}
}
実行結果
ADMIN : 追加, 削除, 更新
USER : 閲覧, コメント
GUEST : 閲覧のみ
解説
- この手法では「enumの内部に配列を持たせる」ことで、構造がシンプルになります。
- 外部配列とenumを同期させる必要がないため、ミスが減ります。
- ただし、配列を動的に変更することは難しいため、固定データ向けの設計です。
注意点とよくある間違い
- enumの順序に依存しない設計を意識すること。
2次元配列のindexとenum.ordinal()がズレると、意図しないデータを参照してしまいます。 - 定義変更時の影響範囲にも注意。enumに新しい要素を追加した場合、配列側も必ず更新が必要です。
- 柔軟性を重視するならMap構造も検討。
たとえばMap<Enum, List<String>>で管理すれば、動的な拡張が容易です。
関連記事
以下の記事も2次元配列の理解を深めるうえで参考になります。
まとめ
enumと2次元配列を組み合わせることで、
定義とデータの対応関係をシンプルに管理できます。
小規模な固定データであればenum内に配列を持たせるのが簡潔ですが、
柔軟に変更が必要な場合は外部の2次元配列やMapを併用するのが現実的です。
今回紹介したサンプルコードをもとに、
業務シーンに合わせた構成を選んでみてください。
どなたかのお役に立てば幸いです。
それではまたー!





































