嗨我正在爲即將到來的測試進行修訂,並且遇到了麻煩。使用陣列的通用隊列
我必須修改此代碼http://pastebin.com/ED2A7VWy以給出隊列的通用實現。問題在於隊列使用數組,出於某種原因,泛型似乎不能很好地與數組一起玩。我試過了:
public class Queue<E>{
private E[] eArray = new E[5];
...
}
但這似乎不起作用。
嗨我正在爲即將到來的測試進行修訂,並且遇到了麻煩。使用陣列的通用隊列
我必須修改此代碼http://pastebin.com/ED2A7VWy以給出隊列的通用實現。問題在於隊列使用數組,出於某種原因,泛型似乎不能很好地與數組一起玩。我試過了:
public class Queue<E>{
private E[] eArray = new E[5];
...
}
但這似乎不起作用。
演員數組來代替:
@SuppressWarnings("unchecked")
private E[] eArray = (E[])new Object[5];
你可以閱讀here爲什麼它是不允許的。
感謝這個偉大的工作,Java類實現仿製藥是真是奇怪。 – user2320239
如果你這樣做,你必須確保不要像'E []'類型那樣將'eArray'返回到類的外部。 – newacct
你可以這樣做 - 沒有任何警告的抑制 - 無鑄造:
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));
}
問題的相關性如何?你也可以這樣做:String [] strings = new String [5];' – newacct
@newacct - 這是一種創建泛型類型數組的方法,無需強制轉換或禁止警告。 – OldCurmudgeon
它不創建一個通用類型的數組。你誤解了它的功能。在'main'中創建'String []'並傳入,並且該方法簡單地創建具有相同運行時類型的另一個數組。 – newacct
http://stackoverflow.com/q/2927391/738746 –