JavaのEnumをループする方法とabstractメソッドを定義する方法

JavaのEnumをループする方法とabstractメソッドを定義する方法

JavaのEnumをループする方法

JavaのEnumにはvalues()というメソッドがあらかじめ用意されています。

Enumを定義します。lombokのAllArgsConstructorアノテーションはEnumで使用するとprivateコンストラクタになります。

このEnumをループしたい場合は以下のようにコーディングします。

結果は以下のようになります。

ストリームを使用してもループは可能です。

結果は以下のようになります。

Arrays.asListを使用してからストリームにしてmapで値だけとってきてループとかもできます。

結果は以下のようになります。

findAny().isPresent()で値が存在するかどうかを判断します。

filter()でフィルタリングしてfindAny()で要素を返してisPresent()で存在確認することができます。

存在すればtrue,存在しなければfalseです。

JavaのEnumでAbstractメソッドを定義する方法

EnumでAbstractメソッドを定義して実行する方法があります。抽象メソッドを定義した場合、各列挙子にその実装メソッドを定義する必要があります。

これを実際に使うにはEnum型で受けます。

valueOfメソッド

EnumではstaticメソッドとしてvalueOfメソッドが用意されています。StringからEnumへ変換します。Enum値が存在しない文字列を指定した場合は、IllegalArgumentExceptionエクセプションが発生します。

以下、例です。

ordinalメソッド

ordinalメソッドを使用すると、Enumの宣言順を取得することが可能です。基底値は0となります。

メンバ変数定義

JavaのEnumではメンバ変数を定義することができます。

メンバ変数は定数となるのでfinalを付けます。

コンストラクタはpublicだとエラーとなり、privateコンストラクタを定義して初期化します。

以下例です。

これをlombokのアノテーションを使用すると以下のようにボイラープレートコードを省略できます。

EnumをMapクラスで変換

既存システムのjarファイル内に存在するEnumを使用しつつ、新規システムで流用したい。でも少し列挙子の名前が異なる、といった場合にif文で分岐しました。

既存システムのEnum

新規システムでは、土→土曜、日→日曜としたいとします。(実際の列挙子はもっと多い)

既存システムのjarは修正が出来ない状態でした。if文で書く方法があります。

これだと循環的複雑度が上がってしまう為、Mapクラスを作成し、変換してみました。

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA