52 votes

Dépannage Avertissement "Le paramètre de type T masque le type T"

Je reçois un 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 apparaît à 'T' dans 'A' et se lit comme suit : "Le paramètre de type T cache le type T".

La partie étrange est que le code suivant ne génère aucune erreur ou avertissement.

 public interface A extends B<T> {
     public T getObject();
}

Mais maintenant, je ne peux pas étendre A en lui disant quel type T est.

Je suis complètement confus. quelquun sait pourquoi cela se passe? Merci.

64voto

Jesper Points 65733

Avez-vous quelque part une classe ou une interface nommée T , ou utilisez-vous T comme nom de type concret quelque part au lieu d'un paramètre de type (ce qui signifie que vous avez peut-être oublié ailleurs, par exemple dans une classe englobante, pour spécifier que T est un paramètre de type) ? Je peux reproduire ton problème avec ceci :

 class T {  // A concrete type T
}

interface B<T> {  // warning: The type parameter T is hiding the type T
}

interface A<T> extends B<T> {  // warning: The type parameter T is hiding the type T
    T getObject();
}

Si je supprime la classe T , elle disparaît.

2voto

ojota84 Points 943

J'essaie:

 public interface B<T> {
    T getObject();

    public  interface A<T> extends B<T>{
        T getObject();
    }
}

sur eclipse Indigo Service Release 2 et il n'y a pas d'avertissement ou d'erreur

0voto

ddc Points 569

Le simple fait de supprimer le <T> générique devant le type de retour a supprimé l'avertissement.

C'est le code précédent :

 private <T> LocalDate convertToDate(Root<T> root, String name, String value) {
    ..........
    ..........
    return LocalDate.parse(value, dtf);
}

Avertissement disparu avec ci-dessous

 private LocalDate convertToDate(Root<T> root, String name, String value) {
    ..........
    ..........
    return LocalDate.parse(value, dtf);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X