【发布时间】:2008-11-13 16:24:27
【问题描述】:
以下代码无法编译:
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 的代码
MyList 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 的调用更改为泛型形式。我希望旧代码只引入警告而不是错误。
【问题讨论】:
-
如果您提供编译错误以及代码会有所帮助。
-
编译错误在示例中的注释中。