0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Java の EnumSet についてメモ

Last updated at Posted at 2024-12-28

はじめに

Javaを学び直している途中に聞き慣れないコードを発見したのでメモ。
EnumSet について書こうとしたものの、前提の Enum や Set についての説明の方が多くなってしまった。

目次

そもそも Enum とは?

列挙型とも呼ばれる。
下記のような形で、要素や区分を一覧でまとめるときに使われる。

Feetype.java
enum Feetype {
    adult, 
    child,
    senior
}

呼び出し側

Test.java
class Test {
    Feetype type;

    boolean isAdult() {
        // enum のクラス名.列挙子名の形で呼び出せる
        // その際の型はFeetype型になる
        return type.equals(Feetype.adult); 
    }
}

enum もクラスの一種なので、通常のクラスと同じように変数やメソッドを持つことができる。

Feetype.java

enum Feetype {
    adult( new AdultFee() ),
    child( new ChildFee() ),
    senior( new SeniorFee() )

    private Fee fee;

    // enum のコンストラクタは private にする必要がある(外部からのインスタンス生成は不可)
    private Feetype(Fee fee){
     this.fee = fee;
    }

    // 円を返すメソッドを実装
    Yen yen() {
        return fee.yen();
    }
}

元から用意されているメソッドには下記のようなものがある。

valueOf

文字列から列挙子名を取得する。
APIから渡された文字列をアプリ内で使う enum に変換する時に使われそう。

例:
Feetype.valueOf("adult")
→Feetype 型のadultが返却される。

valueOf

全ての列挙子を返却する。

例:
Feetype.values()
→Feetype[] 型で全ての列挙子が出力される

そもそもSetとは?

(ざっくり)
List型に似ている型。
Setの場合は順番が保証されず、ユニーク制約がついている点がListとは異なるらしい。

(本題) EnumSet について

Enum型でのみ使えるSetのこと。
EnumSet.of()で Enum のSetを作成することができる。
Enum のグループを作りたい時に使うと便利そう。

Test.java
Set overTwenty = EnumSet.of( Feetype.adult, Feetype.senior );

if(overTwenty){
    // 大人に対して行いたい処理
}

余談:Kotlinだとどうなる?

Enum, Set, EnumSet ともにKotlinでも同様のメソッドが用意されているので、基本的には同じノリで使える様子。
ただし Set の場合は MutableSetSet が用意されているので状況によって使い分けると良さそう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?