我一直在与泛型作斗争。我不知道为什么这让我发疯。我遇到了好几次的老问题。
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<?>[] {
这个解决方案并不令人满意,因为你不能那么容易地转换。
所以我的问题是:如何解决这个问题?我脑子里的结在哪里?
最佳答案
这是因为java不支持泛型数组的创建。泛型最适合集合。所以你可以使用 ArrayList 来解决你的问题:
ArrayList<Class<? extends Father>> myNiceClasses = new ArrayList<Class<? extends Father>>();
myNiceClasses.add(Child1.class);
myNiceClasses.add(Child2.class);
关于java - 与泛型和类作斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1102228/