This is a pretty sophisticated object that resolves parameterized types, and can handle some
pretty complex situations. For comments throughout this class, reference this example:
trait OuterTrait[T, U, V] {
val a: T
val b: List[U]
val d: V
}
trait InnerTrait[Y] {
val x: Y
}
case class InnerClass[Z](x: Z) extends InnerTrait[Z]
case class OuterClass[Z, X, P](c: Z, a: InnerTrait[Z], b: List[InnerTrait[X]], d: P) extends OuterTrait[InnerTrait[Z], InnerTrait[X], P]
This is a pretty sophisticated object that resolves parameterized types, and can handle some pretty complex situations. For comments throughout this class, reference this example:
trait OuterTrait[T, U, V] { val a: T val b: List[U] val d: V } trait InnerTrait[Y] { val x: Y } case class InnerClass[Z](x: Z) extends InnerTrait[Z] case class OuterClass[Z, X, P](c: Z, a: InnerTrait[Z], b: List[InnerTrait[X]], d: P) extends OuterTrait[InnerTrait[Z], InnerTrait[X], P]