下面的代碼無法編譯:引入泛型的Java代碼,而不破壞構建
public class GenericsTest {
public static void main(String[] args) {
MyList<?> list = new MyList<Object>();
Class<?> clazz = list.get(0);
// Does not compile with reason
// "Type mismatch: cannot convert from Object to Class"
MyList list2 = new MyList();
Class clazz2 = list2.get(0);
}
static class MyList<T> extends ArrayList<Class<T>> {
}
}
我想這樣做是爲了引入泛型的舊代碼,而不破壞構建。
這是編譯器(eclipse和javac)中的錯誤還是我在這裏丟失了一些東西?將泛型引入MyList還有什麼其他可能性?
編輯
對於澄清:
我有泛型類
public class MyList extends ArrayList<MyObject> {}
與
public class MyObject {}
,並使用MYLIST
代碼3210MyList list = new MyList();
...
MyObject o = list.get(0);
發展中,我看到我要介紹的泛型MYOBJECT
public class MyObject<T> {}
,現在我想有MYLIST這個新的通用啄以及
public class MyList<T> extends ArrayList<MyObject<T>> {}
期間
現在但這並突破我的構建。有趣的是
public class MyList<T> extends ArrayList<MyObject<T>> {
public MyObject<T> get(int i) {
return super.get(i);
}
}
將使舊的代碼
MyList list = new MyList();
...
MyObject o = list.get(0);
編譯。
好的,似乎當我引入這個泛型時,我將不得不將所有對MyList的調用改爲泛型。我希望舊代碼只引入警告而不是錯誤。
如果您提供編譯錯誤以及代碼,這將有所幫助。 – Herms 2008-11-13 16:34:27
編譯錯誤在示例中的註釋中。 – 2008-11-13 17:00:54