我正在嘗試創建一個方法,該方法將獲取物件串列和型別串列,然后檢查特定物件是否與特定型別匹配。
我試圖創建一個虛擬示例。在下面的代碼中,驗證方法獲取物件串列和型別串列,然后嘗試驗證每個物件的型別。我知道下面的代碼是錯誤的,但我只是為了傳達問題而創建的,如果你能告訴我如何在 Scala 中做到這一點,那就太好了。
object T extends App {
trait MyT
case class A(a: Int) extends MyT
case class B(b: Int) extends MyT
def validate(values: Seq[Any], types: Seq[MyT]): Seq[Boolean] =
for ((v, ty: MyT) ← values.zip(types)) yield v.isInstanceOf[ty]
// create objects
val a = A(1)
val b = B(1)
// call validate method
validate(Seq(a, b), Seq(A, B))
}
uj5u.com熱心網友回復:
型別不是值,因此您不能擁有它們的串列。
但是,您可以Class改用:
def validate(values: Seq[Any], types: Seq[Class[_ <: MyT]]): Seq[Boolean] =
values.lazyZip(types).map {
case (v, c) =>
c.isInstance(v)
}
可以這樣使用:
validate(Seq(a, b), Seq(classOf[A], classOf[B]))
// res: Seq[Boolean] = List(true, true)
您可以看到這里運行的代碼。
但是,請注意,如果您的類由于型別擦除而開始具有型別引數,這將中斷。
請注意,我個人不推薦此代碼,因為恕我直言,它的定義validate是代碼異味,我敢打賭您有導致這種情況的設計錯誤。
我建議尋找一種方法來避免這種情況并解決根本問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/417415.html
標籤:
