自作Exception

##Exceptionを作ってみる

```WahhoiException.java
package exception;

/**
 * <b>わっほいな例外.<b>
 *
 * @author me
 *
 */
public class WahhoiException extends Exception{

	// warning回避
	private static final long serialVersionUID = 1L;

	/**
	 * Constructor.
	 *
	 * @param msg 出力メッセージ
	 */
	public WahhoiException (String msg) {
		super(msg);
	}
}

```

```PracticeException1.java
package test;

import java.util.Optional;

import exception.WahhoiException;

/**
 * Test.
 *
 * @author me
 *
 */
public class PracticeException1 {

	/**
	 * main
	 *
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			run(Optional.ofNullable(null));
		} catch (WahhoiException e) {
			System.out.println(e.getMessage());
		}
	}

	/**
	 * 練習メソッド.
	 *
	 * @param opt よくわからんOptionalの値
	 * @throws WahhoiException 入力値がnullの場合
	 */
	private static void run(Optional<Object> opt) throws WahhoiException {
		if (opt.isPresent()) {
			System.out.println("わっほい");
		} else {
			throw new WahhoiException("wahhoi");
		}
	}

}

```

ということでオリジナルなExceptionを作れるんですね
すでに存在してて意味ないかもしれませんが、ちょっと作ってみました！

##例えばこんな感じ

```NoRecordException.java
package exception;

/**
 * <b>検索結果が0件のときに発生するException.</b>
 *
 * @author me
 *
 */
public class NoRecordException extends Exception{

	// warning回避
	private static final long serialVersionUID = 1L;

	/**
	 * Constructor.
	 *
	 * @param msg 出力メッセージ
	 */
	public NoRecordException(String msg) {
		super(msg);
	}
}

```

```Model1.java
package model;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import exception.NoRecordException;

/**
 * <b>Model1.</b>
 *
 * @author me
 *
 */
public class Model1 {

	/**
	 * 主キーで検索する.<p>
	 * 架空のテーブルを主キーで検索し,該当データをリストで返す.<p>
	 * 必ずExceptionになるようにした.
	 *
	 * @param id 主キー
	 * @return 該当データのリスト
	 * @throws NoRecordException 対象のレコードが存在しない場合
	 */
	public List<Model1> find(String id) throws NoRecordException{
		List<Model1> modelList = Collections.synchronizedList(new ArrayList<Model1>());
		// SELECT * FROM table;
		if (!modelList.isEmpty()) {
			return modelList;
		} else {
			throw new NoRecordException("対象のレコードが存在しませんでした。");
		}
	}

	/** ID */
	private Integer id;
	/** 名前 */
	private String name;
	/** 作成者名 */
	private String createdBy;
	/** 作成日時 */
	private Date createdAt;
	/** 更新者名 */
	private String updatedBy;
	/** 更新日時 */
	private Date updatedAt;

	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getCreatedBy() {
		return createdBy;
	}
	public void setCreatedBy(String createdBy) {
		this.createdBy = createdBy;
	}
	public Date getCreatedAt() {
		return createdAt;
	}
	public void setCreatedAt(Date createdAt) {
		this.createdAt = createdAt;
	}
	public String getUpdatedBy() {
		return updatedBy;
	}
	public void setUpdatedBy(String updatedBy) {
		this.updatedBy = updatedBy;
	}
	public Date getUpdatedAt() {
		return updatedAt;
	}
	public void setUpdatedAt(Date updatedAt) {
		this.updatedAt = updatedAt;
	}

}

```

テーブルからデータを検索して、レコードが0件だったらExceptionにする。

```PracticeException2.java
package test;

import java.util.List;

import exception.NoRecordException;
import model.Model1;

/**
 * Test.
 *
 * @author me
 *
 */
public class PracticeException2 {

	/** Model1 */
	private static Model1 model1 = new Model1();

	/**
	 * main
	 *
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(run());
	}

	/**
	 * 架空テーブルを検索し,レコードの最初の1件を取得する.<p>
	 * 該当レコードが存在しない場合,{@code null}を返却.<p>
	 *
	 * @return 検索結果
	 */
	private static Model1 run() {

		try {

			// テーブルを検索し,最初の1件を取得
			List<Model1> list = model1.find("id");
			return list.stream().findFirst().get();

		} catch (NoRecordException e) {

			// 該当レコードが存在しない場合
			return null;

		}

	}

}

```

まぁありきたりですかねw
この場合だとfindFirstの問題なのでNoSuchElementExceptionと同じ意味ですから
ほぼ意味のない実装ですね...w

Exceptionは頻繁に作るようなものでもないのかなって思いますけれど、やっぱりどういう場合がだめなのかを
しっかりと知らせてくれるのでとても重要ですね

使わなきゃ忘れそうなのでどんどん使っていきたいです

けど作る回数少なそう...