trait InnerTrait
case class InnerFirst() extends InnerTrait
case class InnerSecond() extends InnerTrait
sealed trait OuterTrait
case class OuterFirst() extends OuterTrait
case class OuterSecond() extends OuterTrait
object OuterTrait {
def create[F <: InnerTrait](): OuterTrait =
??? match {
case InnerFirst() => OuterFirst()
case InnerSecond() => OuterSecond()
}
}
чтоб потом в create подсунул в качестве типа нужный наследник InnerTrait и тебе инстанцировал нужного наследника OuterTrait.
Например
val v1: OuterTrait = OuterTrait.create[InnerFirst]()
val v2: OuterTrait = OuterTrait.create[InnerSecond]()
и в v1 и v2 соответственно OuterFirst и OuterSecond
через тайпклассы?
Обсуждают сегодня