In Scala ist es üblich, Klassenarten als Generika zu übergeben oder explizit weiterzugeben?Scala-Funktionsargumente: generischer Typ der Klasse vs Funktion, z.B. f (classOf [Foo], "bar") vs f [Foo] ("bar")
Zum Beispiel habe ich eine Hilfsfunktion erstellt, um ein Java-Objekt zu erstellen, das eine Quellausnahme, eine Zielausnahme und einen dritten Parameter aufnimmt (ich benutze nur eine Zeichenfolge für dieses Beispiel). Welche ist besser Praxis in Scala:
exceptionTranslation(classOf[FooException], classOf[BarException], "blah")
def exceptionTranslation(sourceClazz: Class[_ <: Throwable], targetClazz: Class[_ <: Throwable], message: String) = new Translation()
.withSource(sourceClazz)
.withTarget(targetClazz)
.withMessage(message)
Oder
exceptionTranslation[FooException, BarException]("blah")
def exceptionTranslation[Source <: Throwable, Target <: Throwable](message: String)(
implicit source: ClassTag[Source], target: ClassTag[Target]) = new Translation()
.withSource(source.runtimeClass.asInstanceOf[Class[Source]])
.withTarget(target.runtimeClass.asInstanceOf[Class[Target]])
.withMessage(message)
ich die ersten besser gefällt als Sie implicits und Runtime-Casting nicht brauchen, aber es ist ein Angelegenheit der Präferenz. –
Stimmen Sie mit @Tuval überein, der zweite ist absolut übertrieben – Chirlo