In questa domanda StackOverflow ho chiesto del comportamento dell'annotazione @throws
in Scala. Ora che capisco come funziona, voglio chiedere delle migliori pratiche con l'utilizzo. Ecco un repost del mio codice da quella domanda:
abstract class SFoo {
def bar(): Unit
}
class SFoobar extends SFoo {
@throws[Exception]
override def bar(): Unit = {
throw new Exception("hi there")
}
}
Il problema qui è che se dichiaro una variabile come SFoo
in Java, ma la istanziamo come SFoobar
, il compilatore Java non è in grado di rilevare l'eccezione verificata e si verificherà un'eccezione di runtime. Quindi la mia inclinazione sarebbe dichiarare @throws
nella classe genitrice, SFoo
.
Ma dì che ho un'altra implementazione concreta di SFoo
:
class SBarfoo extends SFoo {
override def bar(): Unit = {
println("no exception here!")
}
}
In questo caso, è appropriato dichiarare @throws
nella classe genitore se una delle sue implementazioni non genera un'eccezione? Qual è la migliore pratica qui? (Ci scusiamo per la domanda soggettiva.)