В Scala общепринятой практикой является передача типов классов в виде дженериков или их явно передача?Аргументы функции Scala: класс vs function generic type, например. f (classOf [Foo], «bar») vs f [Foo] («bar»)
Например, я создал вспомогательную функцию для создания объекта Java, который принимает исключение источника, целевое исключение и третий параметр (я просто использую строку для этого примера). Какой из них лучше практика в 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)
Или
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)
Мне нравится первая один лучше, так как вы не нужны никакие implicits и отливку во время выполнения, но это вопрос предпочтения. –
Согласитесь с @Tuval, второй абсолютно перебор. – Chirlo