技術開発日記

技術やら日々思ったことを綴ってます。

IllegalArgumentExceptionとIllegalStateExceptionの違い

メソッドの引数が不正だった場合に IllegalArgumentException をthrowするのはよく使っていたりしていたけど、、、
以下のような感じで。

public void regist(String name) {

    // 引数チェック
    if (name == null) {
        throw new IllegalArgumentException("引数が不正です。");
    }
}


ただ、それとは別に IllegalStateException というものがあって、これがオブジェクト状態が不正のときに使うものだとは知らなかった。

例えばあるオブジェクトのフィールドがnullを保持して欲しくないのに、実際はnullだったときなど、オブジェクトのフィールド絡みのときに使うらしい。


以下は簡単な例

public class People {
    private String name;
	
    public void setName(String name) {
        this.name = name;
    }
	
    public String getName() {
        return name;
    }
}

public class Main {	
    public void printPeopleName(People people) {
		
        // nameがnullの場合はエラー
        if (people.getName == null) {
            throw new IllegalStateException("名前が設定されていません。");
        }
        System.out.println(people.getName):
    }
}