java - 与泛型和类作斗争

标签 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
    }
}

工作。编译器这样提示:

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/

相关文章:

java - 应用程序下载网页不工作

具有类型验证的 Spring getBean

generics - Kotlin 工厂接口(interface)与泛型

java - 是否可以通过此方法返回或以某种方式访问​​ "courses"中的数据?

java - 从 Eclipse Java 项目创建 Android 应用程序

javascript - 以数组为参数并生成随机数的函数

python - 如何在 Python 中用零初始化一个整数 array.array 对象

php - 如何使服务器 header 的输出更具可读性?

java - 使用内部类的 Jackson TypeReference

java - InvalidClassException 不兼容的类 (SUID)