簡體   English   中英

我可以從 Scala 中的 Type 參數中提取抽象類的子類實例嗎?

[英]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.bt將是類型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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM