0
votes

Comment revenir de la méthode Scala avec des génériques

J'ai deux trait

error: type mismatch;
 found   : Null(null)
 required: B
           return Response(data, null)


0 commentaires

3 Réponses :


2
votes

Vous pouvez soit modifier le type GenerateSesponse () CODE> Type de retour ...

def generateResponse[A <: TResponseData, B <: TRequestData] (data: A
                                                            ,request: B
                                                            ,passRequestInResponse: Boolean
                                                            ): Response[A, B] = 
  if (passRequestInResponse) Response(data, request)
  else                       Response(data, null.asInstanceOf[B])


1 commentaires

Merci pour votre réponse. J'utiliserai GenerateSeSPonse parce que je fais une opération supplémentaire.



2
votes

Utilisation de null code> est une mauvaise idée (comme indique retour code>) afin qu'il vaut mieux utiliser l'option code>: xxx pré >

Vous pouvez également faire quelque chose d'option code> magique comme ceci: p> xxx pré>

L'avantage de cette formulation est qu'il fonctionnera si Demande code> est null code> et traitera ce boîtier comme si PASSRQUESTINResponse CODE> était false code> p>

Mise à jour h3 >

Comme indiqué par @jwvh, il n'est pas clair que la fonction generateSesponse code> est utile car vous pouvez simplement appeler réponse (données, certains (Demande)) code> ou ou Réponse (données) code> au besoin. Si vous n'aimez pas ce quelques code> dans la première version, créez un objet de classe avec un Personnalisé code> Méthode: P>

object Response {
  def apply[A <: TResponseData, B <: TRequestData](data: A, request: B): Response[A, B]
    = Response(data, Option(request))
}


0 commentaires

1
votes

La raison de l'erreur est que tous les types de Scala ont un type de fond de rien. Rien ne peut accepter la valeur "null" et donc la définition de type est problématique car b ne peut être rien.

Pour résoudre ce problème, vous pouvez ajouter une limite inférieure: P>

if (passRequestInResponse) {
  Response(data, Some(request))
} else {
  Response(data)
}


0 commentaires