2014-01-09 45 views
1

嗨我正在爲即將到來的測試進行修訂,並且遇到了麻煩。使用陣列的通用隊列

我必須修改此代碼http://pastebin.com/ED2A7VWy以給出隊列的通用實現。問題在於隊列使用數組,出於某種原因,泛型似乎不能很好地與數組一起玩。我試過了:

public class Queue<E>{ 
    private E[] eArray = new E[5]; 
... 

} 

但這似乎不起作用。

+0

http://stackoverflow.com/q/2927391/738746 –

回答

2

演員數組來代替:

@SuppressWarnings("unchecked") 
private E[] eArray = (E[])new Object[5]; 

你可以閱讀here爲什麼它是不允許的。

+0

感謝這個偉大的工作,Java類實現仿製藥是真是奇怪。 – user2320239

+0

如果你這樣做,你必須確保不要像'E []'類型那樣將'eArray'返回到類的外部。 – newacct

-2

你可以這樣做 - 沒有任何警告的抑制 - 無鑄造:

public class Objects { 

    // Call without a second parameter to get an array of the specified type with the specified length. 
    public static <T> T[] newArray(int length, T... empty) { 
     return Arrays.copyOfRange(empty, 0, length); 
    } 
} 

public class Test<T> { 

    public void test() { 
     // Only specify the length - Java creates an empty one for the varargs param. 
     T[] demo = Objects.<T>newArray(5); 
     System.out.println(Arrays.toString(demo)); 
    } 
+0

問題的相關性如何?你也可以這樣做:String [] strings = new String [5];' – newacct

+0

@newacct - 這是一種創建泛型類型數組的方法,無需強制轉換或禁止警告。 – OldCurmudgeon

+0

它不創建一個通用類型的數組。你誤解了它的功能。在'main'中創建'String []'並傳入,並且該方法簡單地創建具有相同運行時類型的另一個數組。 – newacct