2016-08-04 3 views
0

J'ai cherché beaucoup de questions et d'autres articles sur Internet, mais je n'arrive pas à trouver celui qui répond à mon cas spécifique, et aucune des autres solutions n'a fonctionné pour moi .Java: J'ai de la difficulté à implémenter l'interface des génériques bornés

J'ai cette interface ici:

public interface PriorityQueueInterface<T extends Comparable<? super T>> 

je dois faire une classe de file d'attente prioritaire pour implémenter cette interface, donc je tapée comme ceci:

public class ArrayPriorityQueue<T> implements PriorityQueueInterface<Comparable<? super T>> 

Cependant, ce n'est pas compiler comme je reçois cette erreur:

type argument Comparable is not within bounds of type-variable T#2 where T#1,T#2 are type-variables: T#1 extends Object declared in class ArrayPriorityQueue T#2 extends Comparable declared in interface PriorityQueueInterface

J'ai essayé tous les types de combinaisons, mais rien ne semble fonctionner . Comment écrire la déclaration de classe pour la compiler?

+0

« PriorityQueueInterface> » ne ressemble pas à un nom d'interface valide . Etes-vous sûr de l'avoir tapé ici correctement? –

Répondre

1

On dirait que ce que vous voulez est de déclarer la variable de type avec la même borne, puis passer que sur un argument à l'interface:

public class ArrayPriorityQueue<T extends Comparable<? super T>> 
    implements PriorityQueueInterface<T> {...} 
+0

Eh bien c'était facile, merci beaucoup! Je suis tout à fait nouveau pour les génériques, donc si vous le pouvez, pouvez-vous s'il vous plaît m'expliquer ce que la déclaration "T étend comparable " signifie? J'ai une idée après avoir cherché, mais j'ai encore du mal à comprendre cette ligne spécifique. – gameCoder95

+0

'T extends Comparable ' signifie que 'T' doit implémenter l'interface' Comparable'. 'T' est passé à' Comparable' comme argument dans 'Comparable ' car une classe implémentant 'Comparable' devrait toujours se présenter comme un argument, par exemple' class String implements Comparable '. Le '? La partie super T' rend juste la limite un peu plus permissible en ce sens qu'elle nous permet d'avoir une situation comme 'la classe A implémente Comparable ' et 'la classe B étend A'. 'B' est un' Comparable 'de sorte que le type plus simple lié le rejette comme un argument. – Radiodef

+0

Explication géniale, merci! Cela m'a aidé à mieux le comprendre. J'ai juste une autre petite question: dans la classe ArrayPriorityQueue ci-dessus, comment instancieriez-vous un tableau d'objets "T"? Apparemment (T []) new Object [size] lance une exception d'exécution car apparemment il ne peut pas lancer de comparaison avec lui. – gameCoder95