簡體   English   中英

具有泛型和可比性的接口和類

[英]Interface and class with generics and Comparable

我在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>

我想要一個具有T類型元素的ArrayList。我希望為所有可比較的類型(實現接口Comparable的類)准備堆。 T可以是String,Double,Integer或我自己的類型(然后,我知道我必須編寫一個compareTo方法...)。

我怎樣才能做到這一點? 我的NetBeans中有很多錯誤...

代替

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

寫:

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

它有效(當然實現繼承的方法)。 有關更多信息,請參見此處

你很親密 嘗試: public class Heap<T extends Comparable>...這是有關Java泛型的許多怪異且IMO的不幸之一。 您永遠不會在<>內使用Implements關鍵字,而只是擴展。 這是一個顯示實際效果的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());
 }
}

沒關系,偽造的格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM