我一直在和仿制药做斗争。我不知道为什么这会让我发疯。我有个老问题,我有好几次了。
class Father {
...
}
class Child1 extends Father {
...
}
class Child2 extends Father {
...
}
public class TestClass {
private static Class<? extends Father>[] myNiceClasses = new Class<? extends Father>[] {
Child1.class,
Child2.class
}
}
这就使得不适用于。编译器的抱怨如下:
Cannot create a generic array of Class<? extends Father>
如果我将(错误的)数组行更改为
private static Class<Father>[] myNiceClasses = new Class<Father>[] {
会出现相同的错误消息,但也会添加此消息:
Type mismatch: cannot convert from Class<Child1> to Class<Father>
唯一有效的版本是这一行:
private static Class<?>[] myNiceClasses = new Class<?>[] {
这个解决方案并不令人满意,因为你不能这么轻易地抛出。
所以我的问题是:如何解决这个问题?我脑子里的结在哪里?
发布于 2009-07-08 23:24:43
这是因为java不支持泛型数组创建。仿制药在藏品中效果最好。因此您可以使用ArrayList来解决您的问题:
ArrayList<Class<? extends Father>> myNiceClasses = new ArrayList<Class<? extends Father>>();
myNiceClasses.add(Child1.class);
myNiceClasses.add(Child2.class);
发布于 2009-07-08 23:22:55
quant_dev的链接线程的意思是,不能创建泛型数组,因为它们不能保证类型安全。您可以在数组中得到泛型不允许的东西。无论如何,我所知道的最干净的方法是:
private static Class<? extends Father>[] myNiceClasses =
(Class<? extends Father>[]) new Class<?>[] {};
发布于 2009-07-08 23:04:45
请参阅在Sun论坛上的这个帖子
https://stackoverflow.com/questions/1102228
复制