LoginSignup
0
0

自作Exception

Last updated at Posted at 2019-11-15

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

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

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

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