0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Java】Enumでif文を少なくする

Posted at

はじめに

保守・開発でプログラムに触れる際、その8割はソースコードを読む時間に費やされるというのはよく聞く話です。
そのため、可読性の高く、保守性の高いソースコードというのは常に意識されるべきですが、どうしても業務システムとなると、ある契約の種類だとか、取引先の種類だとか、種類による条件分岐がどうしても多くなりがちだと感じています。
そこで、if文を少なくなるする方法の1つとしての、Enumを使用した方法があるということを知ったので、忘れないように投稿します。

if文を少なくするメリット

if文による条件分岐が多い場合、Enumを使用することでとても読みやすくなります。

具体例

SampleEnum.java
public enum SampleEnum {

	kind1(new Kind1()),
	kind2(new Kind2()),
	kind3(new Kind3()),
	kind4(new Kind4());

	SuperKind kind;

	private SampleEnum(SuperKind kind) {
		this.kind = kind;
	}

	public void execute(Object obj) {
		kind.execute(obj);
	}
}

まずはEnumを用意します。
次に、各プロパティに対して、実行したい処理クラスを記載し、コンストラクタを定義します。
最後に、実行したい処理クラスの実行メソッドを定義します。

Enum自体は、この3ステップで実装完了です。
あとは、種類が追加された場合は、プロパティを追加して、その種類ごとに実行したい処理クラスを記載するだけです。
 

Kind1.java
public class Kind1 implements SuperKind {

	public void execute(Object obj){

		if(!(obj instanceof String)) {
			System.out.println("引数には文字列を指定してください");
		}
		System.out.println("Kind1のクラスで" + obj);
	}
}

実行したい処理クラスです。
ここでは簡単に、そのクラスで実行されたことがわかる文を、コンソールに出力するようにします。
SuperKindは、interfaceです。ここでは中身はexecuteメソッドを定義しているだけなので、割愛します。
 

Main.java
public class Main {

	public static void main(String[] args) {

		SampleEnum test1 = SampleEnum.valueOf("kind1");
		SampleEnum test2 = SampleEnum.valueOf("kind2");
		SampleEnum test3 = SampleEnum.valueOf("kind3");
		SampleEnum test4 = SampleEnum.valueOf("kind4");

		String string = "Enumのテスト";

		test1.execute(string);
		test2.execute(string);
		test3.execute(string);
		test4.execute(string);
	}
}

mainクラスです。ここで実行した結果は、以下の通りになります。

Kind1のクラスでEnumのテスト
Kind2のクラスでEnumのテスト
Kind3のクラスでEnumのテスト
Kind4のクラスでEnumのテスト

最後に

このような実装をすることで、Factoryクラスでのif文判定を減らすこともできれば、どの業務ロジック処理を呼び出すかなどのif文判定を減らしたりなど、活用の幅は大きいかと感じました。

0
3
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
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?