boolean
DB操作を行い、成功/失敗の値を送信する機能を持っています。失敗したと仮定して、失敗理由を戻り値として送りたい。
今のところ、戻り値を文字列として定義しています。失敗の場合は戻り"failure: reason"
、成功の場合は戻り"success"
ます。しかし、これは良い習慣ではありません。
boolean
DB操作を行い、成功/失敗の値を送信する機能を持っています。失敗したと仮定して、失敗理由を戻り値として送りたい。
今のところ、戻り値を文字列として定義しています。失敗の場合は戻り"failure: reason"
、成功の場合は戻り"success"
ます。しかし、これは良い習慣ではありません。
失敗すると、checked をスローできますcustom Exception
。
public class DBException extends Exception{
public DBException(String exp){super(exp)}
...
}
エラー メッセージを static final Strings にして、他のクラスがアクセスできるようにすることができます。例:
public static final String DB_FAILURE_REASON1 = "failure: reason1";
それ以外の場合は、Exception のサブクラスを作成し、特定の理由を Exception として保存するかmsg
、特定の失敗理由のためにサブクラスのサブクラスをさらに作成します。
public class MyDBFailure extends Exception
メソッドに a を追加throws
します。
public String myDBMethood() throws MyDBFailure
理想的には、例外をスローする必要があります (既存の例外がニーズに合わない場合は、例外をカスタマイズできます)。あなたのアプローチはよりCに似ています。
本当に例外を使用できない場合 (これにより、コードを使用して何をすべきかを決定するユーザーが提供されます)、列挙に頼って、すべてではないにしても、いくつかの可能な結果をリストすることができます。ただし、このようなアプローチは非常に面倒な場合があることに注意してください。
Result
戻り値と getter (またはオーバーロードtoString()
メソッド)を含む文字列フィールドを持つ独自のクラスを作成します。
public class Result {
String message;
public Result(String message) {
this.message = message;
}
public String toString() {
return message;
}
}
別のオプションは、列挙型を使用することです。
失敗時に例外をスローし、try-catch ステートメントで関数を呼び出すことができます。
文字列型のグローバル変数を作成し、失敗時にそれを設定して false を返すと、グローバル変数からエラー メッセージを取得できます。
最初の要素が戻り値で、2 番目の要素がエラー メッセージである配列を返すことができます。
私の個人的なお気に入りは、2 番目のオプションです。
これはあなたが使用するものですthrow exception
。メソッドのシグネチャを変更して、戻り値をブール値に設定できます。次に、カスタム Exception クラスを作成します。
public class MyCustomException extends RuntimeException {
// define error code, error message etc.
// create getters & setters
}
その後、失敗の理由を見つけたら、次のようにします。
if (some_failure_reason == true) {
throw new MyCustomException(error_code) ;
}
コントローラー (またはサービス) で、例外をキャッチします。
try {
// call the method in question
} catch (MyCustomException mce) {
if(mce.getErrorCode() == some_error_code) {
// do stuff
}
}
CustomException
戻りエラー コード コードと共に使用します。エラーの理由を特定するより良い方法は、エラー状態が発生するたびに列挙型で例外を構築できるように、列挙型内で定義することです。
また、このパラダイムを拡張して、必要に応じて単一の例外で複数のエラー コードを処理することもできます。
エラー状態が検出されるたびに、のインスタンスを作成しCustomException
てスローします。
//Error Condition detected
if(input<10)
throw new CustomException("Invalid Input it should be greater
than 10 ", ErrorCode.ErrorCode1);
以下のような複数のエラー条件を使用できます。
if(intput>100 && input < 1000)//Just a sample case.
throw new CustomException("Invalid Input it should be not be greater
than 100 and less than 1000 ", EnumSet.of(ErrorCode.ErrorCode1,
ErrorCode.ErrorCode2));
のソースCustomException
:
public class CustomException extends Exception {
private EnumSet<ErrorCode> errorCodes;// You can also maitain multiple
// error codes for same
// exception
public CustomException(String message, ErrorCode errorcode) {
super(message);
this.errorCodes = EnumSet.of(errorcode);
}
public CustomException(String message, EnumSet<ErrorCode> errorcode) {
super(message);
this.errorCodes = EnumSet.copyOf(errorcode);
}
}
public enum ErrorCode {
ErrorCode1(1, "First Error"), ErrorCode2(2, "Second Error");
int code;
String reason;
private ErrorCode(int code, String reason) {
this.code = code;
this.reason = reason;
}
}