8
votes

Surcharge de la méthode avec des génériques

où j'essaie de créer deux méthodes de surcharge statiques, j'ai eu une erreur de compilation. Quelqu'un peut-il expliquer cela? XXX


0 commentaires

3 Réponses :


16
votes

La raison est Effacement de type . Les génériques ne sont pas stockés dans les classes, elles ne compilent que des informations sur le temps, donc au moment de l'exécution, les deux méthodes sont identiques et il y a donc un conflit de dénomination.

référence

  • section génériques du soleil Java Tutoriel
  • Generics et collections Java (Livre)

    Ces trois méthodes sont en réalité identiques (lues: elles produisent un bytecode identique): xxx

    Si vous voulez vraiment avoir deux méthodes distinctes, vous devez fournir Différentes signatures de méthodes (par exemple, différents noms de méthodes, un paramètre supplémentaire pour l'une des méthodes, etc.)


2 commentaires

La résolution de la méthode est effectuée à l'heure de la compilation. La langue Java pourrait donc être étendue pour permettre ce type de surcharge sans réification. Cependant, il est probablement plus simple d'insister sur une meilleure méthode nommée.


Oui, mais l'objectif était de ne pas casser le format binaire (le code hérité devait continuer à fonctionner, même avec le nouveau code)



1
votes

du point de vue des paramètres de méthodes SET et définissez > sont identiques, car toutes les instances d'un générique Les classes ont la même classe d'exécution (définie dans votre cas), quels que soient leurs paramètres de type réelle. Par conséquent, vous obtiendrez une erreur d'effacement . Aussi à l'exécution des deux ressemblera à ... annulation statique du public A (set Stringset) {} et annulation statique publique A (Set Mapset) {}


0 commentaires

0
votes

Vous avez eu l'erreur du compilateur car les méthodes ne sont pas surchargées correctement. Les deux méthodes ont un paramètre de type défini qui rend les méthodes identiques à son compilateur.


0 commentaires