trait Account[T <: Account[T]]
case class BrokerAccount(total:BigDecimal) extends Account[BrokerAccount]
case class SavingsAccount(total:BigDecimal) extends Account[SavingsAccount]
Ниже объявление функции и вызов работают нормально.
def foo1( xs: Array[T forSome { type T <: Account[T] }]):Array[T forSome { type T <: Account[T] }] = xs
foo1(Array(BrokerAccount(100),SavingsAccount(50)))
Но ниже вызов дает ошибку компиляции.
def foo2( xs: List[T forSome { type T <: Account[T] }]):List[T forSome { type T <: Account[T] }] = xs
foo2(List(BrokerAccount(100),SavingsAccount(50)))
Ошибка
Main.scala:14: ошибка: несоответствие типов;
найдено: List[Product with Serializable with Main.Account[_ >: Main.SavingsAccount with Main.BrokerAccount ‹: Product with Serializable with Main.Account[_ >: Main .SavingsAccount с Main.BrokerAccount ‹: Product with Serializable]]]
требуется: List[T forSome { type T ‹: Main.Account[T] }] foo2(List(BrokerAccount(100),SavingsAccount(50)) )
Может кто-нибудь объяснить мне, почему ошибка компиляции возникает в более позднем случае?