2017-10-18 14 views
0

forループがあります。私はIndexOutOfBoundsExceptionを期待しています。この特別な例外を発生させてカスタム例外をスローする必要があります。私のカスタム例外ではなく、しかし、例外をキャッチして別の例外をスローする方法

try { 
    for (i <- 0 until end) { 
    // do something 
    } 
} catch { 
    case e: IndexOutOfBoundsException => 
    throw CustomException("Raised expected IndexOutOfBoundsException", e) 
} 

上記のスニペットが実行されると、コンパイラはIndexOutOfBoundsExceptionが提起されたことを私に告げると:私は現在、これを持っています。私のカスタム例外を発生させるためには何が必要でしょうか?

case class CustomException(private val message: String = "", private val cause: Throwable = None.orNull) extends Exception(message, cause) 
+2

あなたは例外をコンパイラから投稿できますか?私はこれを使って 'CusomException'を取得します。 – Shaido

+0

@Shaido私はIndexOutOfBounds Exceptionを取得しており、カスタム例外は発生していません。 – franklin

+1

プログラムはコードの 'catch '部分にまったく入りますか?デバッグ/プリントを試して、そうでないかどうかを確認してください。私が考えることができるのは、通常、 'new'キーワードを使って' throw new customException'ですが、それは問題ではないと思います。 – Shaido

答えて

0

使用TryrecoverWith

カスタム例外

は以下のように定義されます。 recoverWithは失敗のケースを処理し、さらに新しいTry計算の成功または失敗を伝播しようとします。

Try { 
    for (i <- 0 until end) { 
    // do something 
    } 
}.recoverWith { case e: IndexOutOfBoundsException => 
Try.failed(CustomException("Raised expected IndexOutOfBoundsException", e)) 
} 
関連する問題