【发布时间】:2015-10-24 21:06:00
【问题描述】:
我有以下代码:
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"))
}
【问题讨论】:
-
您对
TLike和TSample中的类型参数T的预期用途是什么?例如,TSample[Int]与TSample[Char]有何不同?它们都将采用String参数,如所写,但既不是TSample[String]或TLike[String]类型,也不是Int或Char实例。我想知道这个因素是否会混淆您在tmp中的使用。 -
@Shadowlands 我已经将我的代码简化为这个,所以我可以问这个问题,我的代码的其他部分需要 T 特征。
标签: scala