Dépannage“, Le paramètre de type T est de cacher le type T” avertissement
Je reçois un message d'avertissement dans eclipse (la version la plus récente) pour le code suivant.
public interface A<T> extends B<T> {
public T getObject();
}
L'avertissement s'affiche à " T "dans" A " et se lit comme suit: "Le paramètre de type T est de cacher le type T".
Ce qui est curieux, c'est que le code suivant génère pas d'erreurs ou d'avertissements.
public interface A extends B<T> {
public T getObject();
}
Mais maintenant je ne peux pas prolonger Un tout dire quel type T est.
Je suis complètement confus. Quelqu'un sait pourquoi ce qui se passe? Merci.
- Dans mon cas, Eclipse, a automatiquement importés
org.apache.poi.ss.formula.functions.T
, qui a provoqué l'alerte.
Vous devez vous connecter pour publier un commentaire.
Avez-vous quelque part ont une classe ou une interface nommée
T
, ou êtes-vous à l'aide deT
comme un type concret nom quelque part plutôt que comme un paramètre de type (ce qui signifie que vous pourriez avoir oublié quelque part d'autre, par exemple dans une classe englobante, pour spécifier queT
est un type de paramètre)? Je peux reproduire le problème avec ceci:Si je supprime la classe
T
, il disparaît.Même si cette question est déjà répondu , depuis la ligne de sujet est sujet ("Le paramètre de type T est de cacher le type T") , je veux juste ajouter que cet avertissement ne signifie pas toujours qu'il y est une classe ou d'un réel de type "T", a déclaré quelque part dans le classpath (ou intérieure) que toutes les réponses/commentaires le suggèrent.
De considérer les éléments suivants:
Parce K ,V est déclaré au niveau de la classe , la méthode ajouter aussi "hérite" d'elle. Si vous obtenez le message d'avertissement.
Ci-dessous supprime l'avertissement et d'erreur du compilateur de cours
Et ma méthode originale est présente. (Ne pas exiger d'autres types génériques pour ma méthode)
Juste pour élargir dernière réponse (je sais la question est vieille et fermé), je vais vous donner un cas plus Simple où vous pouvez comprendre l'erreur:
Imaginer une interface avec une méthode générique comme:
Si vous essayez de le remplacer en tant que:
Le compilateur vous met en garde:
Ce que cela signifie, c'est que "l'Objet" est une étiquette générique ici, ce n'est pas java.lang.Objet. Si vous avez changé d'Objet de type V ou quel que soit arbitraire de la lettre, qui ne se produirait pas. Mais vous utilisez et appelative qui entre en collision avec une classe définie, de sorte que le compilateur vous avertit que cet Objet de vous est de cacher ce qui serait autrement compris que l'Objet commun de la classe.
J'essaie:
sur eclipse Indigo Service Release 2 et il n'y a aucun message d'avertissement ou d'erreur