Scala pac4j播放SecureAction(扩展),类型不匹配

Scala pac4j播放SecureAction(扩展),类型不匹配,scala,playframework,sbt,type-mismatch,pac4j,Scala,Playframework,Sbt,Type Mismatch,Pac4j,我正在尝试扩展pac4j播放模块的SecureAction,因为我需要验证一些额外的东西并添加到请求中,以便在控制器中轻松访问 但我遇到了一个类型不匹配的编译问题,我似乎无法理解为什么 class SecureSiteAction[P<:CommonProfile, ContentType, R[X]>:AuthenticatedRequest[P, X]<:Request[X]](clients: String, authorizers: String, matchers:

我正在尝试扩展pac4j播放模块的SecureAction,因为我需要验证一些额外的东西并添加到请求中,以便在控制器中轻松访问

但我遇到了一个类型不匹配的编译问题,我似乎无法理解为什么

class SecureSiteAction[P<:CommonProfile, ContentType, R[X]>:AuthenticatedRequest[P, X]<:Request[X]](clients: String, authorizers: String, matchers: String, multiProfile: Boolean, parser: BodyParser[ContentType], playSessionStore: PlaySessionStore, config: Config)(implicit implicitExecutionContext: ExecutionContext)
  extends SecureAction[P, ContentType, R](clients, authorizers, matchers, multiProfile, parser, playSessionStore, config) {

  override def invokeBlock[A](request: Request[A], block: R[A] => Future[Result]): Future[Result] = {
    super.invokeBlock(request, { request: R[A] =>
      val site = Site(request.host)
      val profiles = request.asInstanceOf[AuthenticatedRequest[P, A]].profiles
      block(AuthenticatedSiteRequest(site, profiles, request))
    })
  }
}

case class AuthenticatedSiteRequest[P<:CommonProfile, +A](site: Site, profiles: List[P], request: Request[A]) extends WrappedRequest[A](request)
这会导致类型错误:

type mismatch;
[error]  found   : binders.AuthenticatedSiteRequest[P,A]
[error]  required: R[A]
[error]       block(AuthenticatedSiteRequest(site, profiles, request))
“有趣的”是,当我直接从pac4j play的
SecureAction
case类复制/粘贴源代码到IDE中时,我得到了完全相同的编译错误


什么可以使这个编译?它是sbt中的一个标志,还是我不知道的东西?

您需要更改下限类型以使用您的
AuthenticatedSiteRequest
,以便将一个类型参数固定到
SecureSiteAction
类的给定参数
p

class SecureSiteAction[
    P <: CommonProfile, ContentType,
    R[X] >: AuthenticatedSiteRequest[P, X] <: Request[X]
  ] //      ^^^^^^^^^^^^^^^^^^^^^^^^ 
类SecureSiteAction[

P:AuthenticatedSiteRequest[P,X]我也试过了,但没有成功。我的IDE和SBT都抱怨这种类型。可能还有其他一些不明显的区别。试着做一个比较
class SecureSiteAction[
    P <: CommonProfile, ContentType,
    R[X] >: AuthenticatedSiteRequest[P, X] <: Request[X]
  ] //      ^^^^^^^^^^^^^^^^^^^^^^^^