与泛型和类一起苦苦挣扎

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)

这个解决方案并不令人满意,因为你无法轻易投射.

所以我的问题是:如何解决这个问题?我脑子里的结是哪里的?

ami*_*mit 8

这是因为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)