💨

Java言語におけるEnum(列挙型)についての個人的まとめ

2022/07/21に公開

Enum(列挙型)とは

使う値を先に列挙してstaticのように前もってメモリに置いとける

Enum の使い所、使い方

ぼく:「色によってスマホの値段変えたいなー」っておもた。条件分岐しよか。

if(color == 1){
  price = 10000;
}else if(color == 2){
  price = 11000;
}else if(color == 3){
  price = 12000
}

しかしこれには問題点が。

  • 1,2,3などのIntで分けると、「マジックナンバー」と言って意味がわからなくなる(他の人や一年後の自分がわからんくなるのでメンテナンス性が落ちる)
    →色をint型の1~3と分けていると1〜3以外の数を入れてしまう可能性がある。
  • ならばString型で色を分別する?それでもスペルミスする可能性があって同じことになる

こんな時にEnumで列挙型を宣言する。

列挙型で宣言すると、代入できる値をその宣言型だけに限定できる


以下、列挙型であるColor型の宣言例

enum Color {WHITE, BLACK, GOLD} //Color型

SmartPhone myPage = new SmartPhone("SE202-1", Color.WHITE) //白に設定

Point

Enum(列挙型)の長所

  • 代入できる値を限定できる
  • WHITE, BLACK, GOLD こいつらを「列挙子」と呼ぶ
  • Color.WHITE のように列挙型.列挙子
  • →列挙子はstaticなインスタンスだから列挙型.列挙子でOK
  • 列挙型の値はstaticなオブジェクトで不変(イミュータブル)なので、== を使って比較できる
  • またオブジェクトなのでColor.BLACK.メソッド 的な感じでも使える
  • ちなみにenum の定義はクラス宣言である。以下例
enum Color {
  WHITE, BLACK, GOLD
  } //こう書き換えるとクラスに見える、よね。

まとめ

  • 使う値を先に列挙型として列挙し、値をstaticのように前もってメモリに置いとける

重要なことはColor型の変数colorは、WHITE,BLACK,GOLDのどれかしか存在しないことです。"RED"や"YELLOW"はありません。つまり、間違った値(型)を使えないので、型の安全性が保証されていると言えます


以上です。間違えが見つかり次第、或いは知識がアップデートされ次第改訂していきます。🙏

GitHubで編集を提案

Discussion