Scala泛型函数返回值

时间:2015-04-12 22:57:34

标签: scala generics scala-generics

我定义了这些类。

trait ResultTrait {
}
case class PostResult (
  @Key("_id") id: String,
  success: String,
  errors: Seq[String] = Seq.empty
) extends ResultTrait

case class PostError (
  message: String,
  errorCode: String
) extends ResultTrait

这不会编译。它给出错误“必需T,但发现PostResult(或PostError)”。

def postLead[T <: SFDCResult](accessToken: AccessToken):
        Future[T] = {
     // depends on response from request, return PostResult or PostError
}

1 个答案:

答案 0 :(得分:1)

正如@Travis Brown已经说过,看起来你正试图表达回报类型的可变性(即&#34;它是PostResult还是{{{ 1}}&#34;)通过泛型,当你真正需要的只是父特质时。

假设您PostError是匿名化错误,您打算使用SDFCResult,我会使用以下内容:

ResultTrait

然后你的方法应该是:

// Make the trait sealed so we can only have our two known implementations:
sealed trait ResultTrait {}
...
// Two subclasses as before