2014-02-09 6 views
1

У меня есть небольшая проблема, связанная с интерфейсами, классами и генериками в Java.Интерфейс и класс с дженериками и сравнимыми

Прежде всего, у меня есть интерфейс, который предназначен для представления идеи очереди приоритета:

public interface PriorityQueue<T> { 

    // insert object o of class T into priority queue with appropriate element 
    public void insert(T o); 

    // remove an element with the highest priority 
    public T remove(); 

} 

Как мы знаем, что мы можем реализовать очередь приоритета по куче или списка. Вот мой класс кучи:

public class Heap <T implements Comparable> implements PriorityQueue<T> 

Я хочу иметь ArrayList, который будет иметь элементы типа T. Я хочу, чтобы моя куча быть подготовлены для всех типов, которые сопоставимы (классы, которые реализуют интерфейс Сопоставимые). T может быть String, Double, Integer или только мой собственный тип (тогда я знаю, что мне нужно написать метод compareTo ...).

Как я могу это сделать? У меня есть много ошибок в моей среде NetBeans ...

+1

Вы также хотите типы, которые сопоставимы * сами по себе *: '>' – newacct

+0

Хорошо, но не могли бы вы объяснить мне свою идею? Я использовал 'public class Heap реализует IPriorityQueue ' и все кажется прекрасным. Я проверил свою кучу на Строках, Целых и Парных, и я вижу, что вся куча работает правильно. – TheOpti

+0

Вы используете raw-тип – newacct

ответ

0

Вместо

public class Heap <T implements Comparable> implements PriorityQueue<T> 

пишут:

public class Heap<T extends Comparable> implements PriorityQueue<T> 

Он работает (конечно реализовать наследуемые методы). См. here для получения дополнительной информации.

0

Вы довольно близко. Попробуйте: public class Heap<T extends Comparable>... Это одна из многих странных и, ИМО, неудачных вещей о Java Generics. Вы никогда не используете ключевое слово «инструменты» внутри <>, только расширяется. Вот тест JUnit, показывающий его в действии:

import org.junit.Test; 
import java.util.ArrayList; 
import java.util.List; 
import static org.junit.Assert.*; 

public class CalcIEProjectTreeTest { 
public static interface Priority<T> { 
    public void insert(T item); 
    public T remove(); 
} 

public static class Heap<T extends Comparable> implements Priority<T> { 
    private List<T> storage = new ArrayList<T>(); 

    public void insert(T item){ 
     storage.add(item); 
    } 

    public T remove() { 
     return storage.remove(0); 
    } 
} 

@Test 
public void testStuff() throws Exception { 
    Heap h = new Heap<String>(); 
    h.insert("testString"); 
    assertEquals("testString", h.remove()); 
} 
} 

Не обращайте внимания на фиктивное форматирование.

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