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