发布
社区首页 >问答首页 >与泛型和类作斗争

与泛型和类作斗争
EN

Stack Overflow用户
提问于 2009-07-09 06:55:03
回答 6查看 435关注 0票数 3

我一直在和仿制药做斗争。我不知道为什么这会让我发疯。我有个老问题,我有好几次了。

代码语言:javascript
代码运行次数:0
复制
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
    }
}

这就使得不适用于。编译器的抱怨如下:

代码语言:javascript
代码运行次数:0
复制
Cannot create a generic array of Class<? extends Father>

如果我将(错误的)数组行更改为

代码语言:javascript
代码运行次数:0
复制
private static Class<Father>[] myNiceClasses = new Class<Father>[] {

会出现相同的错误消息,但也会添加此消息:

代码语言:javascript
代码运行次数:0
复制
Type mismatch: cannot convert from Class<Child1> to Class<Father>

唯一有效的版本是这一行:

代码语言:javascript
代码运行次数:0
复制
private static Class<?>[] myNiceClasses = new Class<?>[] {

这个解决方案并不令人满意,因为你不能这么轻易地抛出。

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-07-09 07:24:43

这是因为java不支持泛型数组创建。仿制药在藏品中效果最好。因此您可以使用ArrayList来解决您的问题:

代码语言:javascript
代码运行次数:0
复制
        ArrayList<Class<? extends Father>> myNiceClasses = new ArrayList<Class<? extends Father>>();
        myNiceClasses.add(Child1.class);
        myNiceClasses.add(Child2.class);
票数 8
EN

Stack Overflow用户

发布于 2009-07-09 07:22:55

quant_dev的链接线程的意思是,不能创建泛型数组,因为它们不能保证类型安全。您可以在数组中得到泛型不允许的东西。无论如何,我所知道的最干净的方法是:

代码语言:javascript
代码运行次数:0
复制
private static Class<? extends Father>[] myNiceClasses =
        (Class<? extends Father>[]) new Class<?>[] {};
票数 4
EN

Stack Overflow用户

发布于 2009-07-09 07:04:45

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1102228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档