web-dev-qa-db-fra.com

Lancer une exception personnalisée

J'essaie de lever une exception personnalisée.

L'implémentation de la classe d'exception personnalisée est:

case class customException(smth:String)  extends Exception

Dans mon code, j'ai enveloppé un morceau de code que je suis sûr que jette lever une exception avec try/catch pour lever mon customException.

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

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

J'ai une erreur de compilation qui dit:

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

Comment pourrais-je lancer ma propre exception personnalisée sur ce cas? Plus tard, je vérifie si l'exception levée est de type [x] pour faire quelque chose de spécifique.

43
Echo

Vous ne lancez pas une exception, mais la classe d'une exception (lisez simplement le message d'erreur du compilateur ...). Vous devez lancer une instance d'exception.

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

Il serait également utile de modifier votre définition de classe d'exception comme suit:

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