看板 java 關於我們 聯絡資訊
程式碼如下: public class z { public static void main(String[] argv) { //String[] s = (String[])new Object[10]; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SimpleCollection<String> Sim = new SimpleCollection<String>(); } } class SimpleCollection<T> { private T[] objArr; public SimpleCollection() { objArr = (T[]) new Object[10]; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ } } 請問板上眾多高手!上面那兩行有什麼不同? 依照我的觀念是,SimpleCollection中在compile time的時候會被取代為 private String[] objArr; public SimpleCollection() { objArr = (String[]) new Object[10]; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ } 但是這樣看起來怪怪的!? String型態的陣列參考指向Object!? 這樣可以編譯並執行不會丟出例外!? 但是在main中的那個我注解的statment並沒有辦法順利編譯~!這是為什麼原因阿? 是泛型類別中有什麼樣的特性我沒注意到嗎? 來補上完整程式碼好了 class Test { public static void main(String[] args) { SimpleCollection<Integer> c = new SimpleCollection<Integer>(); for(int i = 0; i < 10; i++) { c.add(new Integer(i)); } for(int i = 0; i < 10; i++) { Integer k = c.get(i); } } } class SimpleCollection<T> { private T[] objArr; private int index = 0; public SimpleCollection() { objArr = (T[]) new Object[10]; //問題在這 } public SimpleCollection(int capacity) { objArr = (T[]) new Object[capacity]; //還有這 } public void add(T t) { objArr[index] = t; index++; } public int getLength() { return index; } public T get(int i) { return (T) objArr[i]; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.170.0.173 ※ 編輯: tgbsa 來自: 118.170.0.173 (06/02 23:07)
csihcs:你確定可以編譯並執行??? 06/02 23:41
tgbsa:是的 06/02 23:56
※ 編輯: tgbsa 來自: 118.170.0.173 (06/03 00:01)