下面的代码无法编译:引入泛型的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