2016-06-11 2 views
2

Я работаю с Generics, и у меня возникла проблема. Итак, у меня есть Node class, у которого есть type parameter<T>, который распространяется по сопоставимым.Использование класса как параметра типа, который может содержать или не содержать другой параметр типа

public class Node<T extends Comparable<T>> implements Comparable<Node<T>> { 

    private T info; 
    private Node next; 
    private Node previous; 

} 

Теперь, я разработал еще один класс сказать Priority Queue class, который также содержит сопоставимое параметр типа.

public class PriorityQueue<Item extends Comparable<Item>> 
implements Iterable<Item> { 

.... 

} 

Но когда я пытаюсь и использовать класс Node как тип в моем классе приоритета очереди, как это:

private MaxPriorityQueue<Node> maxPriorityQueue; 

Это дает мне ошибку говоря, Type parameter Node is not defined within bounds, should implement java.lang.comparable.

Я думаю, что я концептуально ошибаюсь при реализации этого. Каким должен быть правильный путь?

Есть ли способ изменить класс приоритета Queue, чтобы он мог принимать любой класс (скажем A), который реализует сопоставимый интерфейс (независимо от того, содержит ли параметр A параметр типа или нет) в качестве параметра типа.?

+0

Что такое DLLNode? –

+0

Пожалуйста, опубликуйте [mcve] проблемы. – Tunaki

+0

@SleimanJneidi: Извините, я редактировал вопрос. – poorvankBhatia

ответ

1

Если я правильно понимаю ваши требования, вам необходимо обеспечить соблюдение вашего PriorityQueue для принятия объектов, которые реализуют сопоставимый интерфейс для себя. В этом случае вам просто необходимо:

class PriorityQueue<Item extends Comparable<Item>> { 

и в конце концов, если вы хотите параметр типа для полезной нагрузки вашего узла:

class Node<T> implements Comparable<Node<T>> { 

, так что вы можете сделать это:

private PriorityQueue<Node<Integer>> maxPriorityQueue; 

Как и здесь: https://ideone.com/GBnHp7 (?) (См. Также комментарии)

1

Вы можете сделать то, что у вас есть е. Вам просто нужно указать тип для Node<T> при объявлении вашей очереди, что-то вроде этого:

private PriorityQueue<Node<String>> queue; 

удачи!

Смежные вопросы