我可以从Scala的Type参数中提取抽象类的子类实例吗?

问题描述 投票:0回答:1

我有一个像下面这样的类结构:

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的类型。

scala inheritance types implicit
1个回答
0
投票

没有办法说服编译器,在给定A类型的情况下,它应该推断B的类型。

© www.soinside.com 2019 - 2024. All rights reserved.