当前,我编写了多个自定义异常案例类来引发异常消息。在此自定义异常中,除了名称之外,其他所有内容都相同。有没有一种方法可以将异常消息动态地仅传递给一个类。这样,我可以避免编写多个case类。 有没有更好的方法来实现该方案?任何建议。 在catch块中抛出自定义消息的目的是使Spark作业失败,并带有适当的异常消息。
示例:
// case class
// Custom Exception-1
final case class MissingRule(private val message: String = "",
private val cause: Throwable = None.orNull)
extends Exception(message, cause)
// Custom Exception-2
final case class MissingPrimaryKey(private val message: String = "",
private val cause: Throwable = None.orNull)
extends Exception(message, cause)
这是实际的实现方式
Object sampleObj {
def process(){
try {
if (some condition){
throw MissingRule ("Rule Missing")
}
if (some conition){
throw MissingPrimaryKey ("Key is Missing")
}
} catch {
// Here I am throwing the exception again
// so that the spark job will fail with proper error message
case _: MissingRule =>
throw MissingRule("Rule Missing")
case _: MissingPrimaryKey =>
throw MissingPrimaryKey("Key is Missing")
case e: Exception =>
println("Exception: " + e.printStackTrace().toString)
} finally {
// some operation
}
}
}
答案 0 :(得分:1)
我不确定您要在这里实现什么。
如果您不想创建多个类,请仅创建一个类,并始终使用不同的消息来抛出该类:
case class MyCoolException(message: String) extends Exception(message)
或者,反过来,如果您想使用不同的类,但又不想给它们指定消息(很有意义),则只需将这些消息用作默认值而不是""
:< / p>
case class MissingRule(message: String = "Rule is missing") extends Exception(message)
case class MissingKey(message: String = "Key is missing") extends Exception(message)
等...