我有以下代碼:重載方法值應用於替代品
case class A[T](a:T, b:Array[Int])
object A {
def apply[T](aa:T):A[T] = A(aa, Array(1, 2, 3))
}
trait TLike[T]
case class TSample1[T](str:String) extends TLike[T]
爲什麼,如果我從A
實例化類型,我得到以下錯誤:
object tmp extends App{
val a = A[TLike[TSample1]](TSample1("dumb"))
}
錯誤:
overloaded method value apply with alternatives:
(a: TLike[TSample1],b: Array[Int])A[TLike[TSample1]] <and>
(aa: TLike[TSample1])A[TLike[TSample1]]
cannot be applied to (TSample1[Nothing])
val a = A[TLike[TSample1]](TSample1("dumb"))
但是,如果我只是把它留給Scalac它可以正常工作:
object tmp extends App{
val a = A(TSample1("dumb"))
}
什麼是'Type參數'T'您的預期目的TLike'和'TSample'?例如,「TSample [Int]」與「TSample [Char]」有什麼不同?它們都會像寫入的那樣接受'String'參數,但都不是'TSample [String]'或'TLike [String]'類型,既不包含'Int'或'Char'實例。我想知道這個因素是否會影響你在'tmp'中的使用。 – Shadowlands
@Shadowlands我已經簡化了我的代碼,所以我可以問這個問題,我需要特性中的T代碼的其他部分。 – Omid