web-dev-qa-db-ja.com

カスタム例外をスロー

カスタム例外をスローしようとしています。

カスタム例外クラスの実装は次のとおりです。

case class customException(smth:String)  extends Exception

私のコードでは、customExceptionをスローするためにtry/catchで例外をスローすると確信しているコードをラップしました。

try{
    val stateCapitals = Map(
      "Alabama" -> "Montgomery",
      "Alaska" -> "Juneau",
      "Wyoming" -> "Cheyenne")

    println("Alabama: " + stateCapitals.get("AlabamaA").get)
}
catch{
    case x:Exception=>throw classOf[CustomException]
}

次のようなコンパイルエラーが発生しました。

        found   : Java.lang.Class[CustomException]
[INFO]  required:    Java.lang.Throwable 
[INFO]       case x:Exception=>throw classOf[CustomException]

このケースで独自のカスタム例外をスローするにはどうすればよいですか?後で、スローされた例外が特定の処理を行うためにtype [x]であるかどうかを確認しています。

43
Echo

あなたは例外を投げているのではなく、例外のクラスです(コンパイラのエラーメッセージを読んでください...)。例外インスタンスをスローする必要があります。

case x:Exception => throw new CustomException("whatever")
55
paradigmatic

また、Exceptionクラスの定義を次のように変更すると役立ちます。

case class customException(smth:String)  extends Exception(smth)
27
Vlad