我有一个像下面这样的类结构:
sealed trait A
case class A1 extends A
case class A2 extends A
case class A3 extends A
sealed trait B[T <: A]
case class B1 extends B[A1]
case class B2 extends B[A2]
case class B3 extends B[A3]
class C[T <: A](val b: B[T])
B[T]
的每个子类与其A
的子类匹配1到1。
val b1 = new B1()
val c1 = new C[A1](b1)
(我的结构有些复杂,因为我有B[T]
的隐式工厂,所以对于C[T]
的apply函数,它可以隐式地找到工厂并创建B[T]
的实例]
如果我要执行val t = c1.b
,则t
将键入B[A1]
。有没有一种方法可以提取B[T]
的子类,以便c1.b
的类型为B1
?我不想定义另一个类型参数,因为所有信息均为A
类型。本质上,我希望C
基于提供的B[T]
的类型知道A
的类型。
没有办法说服编译器,在给定A
类型的情况下,它应该推断B
的类型。