Qu'est-ce qui me manque sur cet extrait de code? Il est écrit: P> MisMatch de type: impossible de convertir de l'entier en n p>
BlockQuote> Merci! P> Mise à jour forte> J'ai changé l'extrait pour utiliser un entier. La même chose arrive. Et cela arrive même lors de la création d'une sous-classe anonyme de
numéro code>. Pourrait-il être éclipse qui est défectueuse à ce sujet? P> p>
5 Réponses :
Bien qu'un entier est un nombre, un entier peut ne pas être compatible avec N, ce qui peut être n'importe quelle sous-classe de nombre. P>
Hmm, tu as raison. Si le code utilisateur à N délimite BigDecimal code>, je ne peux pas retourner un
Entier code>. Il n'a clairement pas la bonne interface.
Je vais simplement retourner la signature de la méthode zéro code> pour renvoyer
Number code> un élimination de la variable de type
n code>. Il s'avère que c'est assez à mes besoins. Ici, c'est si vous êtes curieux: gist.github.com/1105403
Entier n'est pas garanti d'être une superclasse de N. Vous ne pouvez donc pas simplement définir une valeur entière à un objet de type N.
Pensez-y de cette façon: Si quelqu'un instance qui n'est évidemment pas valide. p> En outre, vous ne pouvez pas faire zéro
zéro
retour 0 code> soit, car de la même manière, le compilateur ne peut pas le convertir en N. (le compilateur ne peut que des types d'autoboxe qu'il connaît environ , mais en utilisant des génériques, vous avez élargi les types disponibles pour inclure également des implémentations personnalisées de nombre.) p> p>
"Entier n'est pas garanti d'être une superclasse de n"? Je suis sûr que vous vouliez dire autre chose, comme si integer code> était i> une superclasse de N, il rendrait le code encore "moins compilable", comme vous ne pouvez pas retourner une superclasse de
n code> à partir d'une méthode qui déclare son type de retour comme
n code>.
Merci pour votre réponse. J'ai accepté la réponse de Christopher parce qu'il était le premier qui lui a rendu clair (pour moi) quel était le problème.
0 est un et dans ce cas, retourner int code>, mais puisque votre méthode renvoie un objet, il sera autoboxé sur un entier code>. Le problème est que le retour d'un
entier code> où toute sous-classe de numéro de numéro fort> est autorisé n'est pas autorisé par le compilateur. C'est simplement parce que vous pouvez instancier votre classe comme
entier code> ne serait pas compatible avec le type de retour attendu:
double code>. p> p>
Le problème avec votre code est que Java doit être capable de confirmer que le type de retour de la fonction doit être convertible vers vous rencontrez des ennuis, car au meilleur de ma connaissance, il n'y a pas de bon moyen de le faire en Java car les génériques sont mis en œuvre via Erasure; Il ne peut pas savoir quel est le type de l'argument. p> p> N étend le numéro code> pour tout
n code>. Donc, en particulier, si je devais instancier la classe avec un
double code>, comme dans
zéro Code> dit qu'il renvoie un
double code> mais cela renvoie réellement un
entier code>. L'erreur de type indique que le compilateur est préoccupé par le fait que quelque chose comme celui-ci se produira. P>
Quand "N" étend "N °", "N" devient une spécialisation du "numéro" et vous ne pouvez pas attribuer une instance d'une classe de base à une variable de référence de sa spécialisation (éventuelle émission). Cela tient bien tout en revenant également. Une instance de classe de base ne peut pas être renvoyée à l'aide du type de spécialisation. P>
Essayez Integer.Valueof (0) B>, on dirait que vous avez trouvé un autre "cas spécial" pour autoboxing-autounboxing et génériques.
0 est un numéro
code>, mais ce n'est pas nécessairement un
n code>