[英]Can I extract the subclass instance of an abstract class from a Type parameter in Scala?
我有一個像下面這樣的類結構:
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]
的應用函數,它可以隱式定位工廠並創建B[T]
的實例)
如果我要執行val t = c1.b
, t
將是類型B[A1]
。 有沒有辦法提取B[T]
的子類,使c1.b
的類型為B1
? 我不想定義另一個類型參數,因為所有信息都在A
的類型中。 本質上,我希望C
根據提供的A
類型知道B[T]
的類型。
無法說服編譯器在給定A
的類型的情況下應該推斷出B
的類型。
也許如果您對用例進行更多擴展,可能會有另一種使用類型類的方法。
但就目前而言,這應該有效。
class C[T <: A, U](val b: U)
(implicit ev: U <:< B[T])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.