J'ai deux trait
error: type mismatch;
found : Null(null)
required: B
return Response(data, null)
3 Réponses :
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])
Merci pour votre réponse. J'utiliserai GenerateSeSPonse parce que je fais une opération supplémentaire.
Utilisation de Vous pouvez également faire quelque chose d'option L'avantage de cette formulation est qu'il fonctionnera si Comme indiqué par @jwvh, il n'est pas clair que la fonction null code> est une mauvaise idée (comme indique retour code>) afin qu'il vaut mieux utiliser l'option code>: code> magique comme ceci: p> Demande code> est null code> et traitera ce boîtier comme si PASSRQUESTINResponse CODE> était false code> p> Mise à jour h3 >
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))
}
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)
}