Я расширяю абстрактный класс, который определяет неявный параметр в его конструкторе.
Кажется, что есть 3 различных способа сделать это:
abstract class Base(z: ZType)(implicit a: AType)
// Explicit
class First(z: ZType, a: Atype) extends Base(z)(a)
// Explicitly pass a into the child class which
// implicitly passes it into the parent class
class Second(z: ZType, implicit val a: AType) extends Base(z)
// Implicitly passed into both
class Third(z: ZType)(implicit a: AType) extends Base(z)
Возможно, это зависит от того, какдочерний класс будет использоваться. В моем случае у дочернего класса не будет неявной области действия AType
, поэтому я склонялся ко второму варианту.
Моя самая большая проблема со вторым вариантом состоит в том, что у меня теперь есть 2 имплицита, определенные длятого же типа, один в родительском классе и один в дочернем классе. Имеет ли это какой-либо эффект, поскольку они всегда будут одним и тем же объектом? Является ли второй шаблон тем, который мне следует избегать по какой-либо причине?
По сути, здесь есть «правильный» шаблон или все они приемлемы в зависимости от контекста кода, в котором они используются?