gue*_*rda 3 java arrays generics
我总是在苦恼中苦苦挣扎.我不知道为什么这会让我发疯.我有一个老问题,我有好几次.
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
}
}
Run Code Online (Sandbox Code Playgroud)
这并不能正常工作.编译器抱怨如下:
Cannot create a generic array of Class<? extends Father>
Run Code Online (Sandbox Code Playgroud)
如果我将(故障)阵列线更改为
private static Class<Father>[] myNiceClasses = new Class<Father>[] {
Run Code Online (Sandbox Code Playgroud)
发生相同的错误消息,但也添加了此消息:
Type mismatch: cannot convert from Class<Child1> to Class<Father>
Run Code Online (Sandbox Code Playgroud)
唯一可行的版本是这一行:
private static Class<?>[] myNiceClasses = new Class<?>[] {
Run Code Online (Sandbox Code Playgroud)
这个解决方案并不令人满意,因为你无法轻易投射.
所以我的问题是:如何解决这个问题?我脑子里的结是哪里的?
这是因为java不支持通用数组创建.泛型最适合收藏.所以你可以使用ArrayList来解决你的问题:
ArrayList<Class<? extends Father>> myNiceClasses = new ArrayList<Class<? extends Father>>();
myNiceClasses.add(Child1.class);
myNiceClasses.add(Child2.class);
Run Code Online (Sandbox Code Playgroud)