首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确使用泛型类型的数组?

如何正确使用泛型类型的数组?
EN

Stack Overflow用户
提问于 2009-05-22 10:32:00
回答 5查看 26.6K关注 0票数 21

我有一个类,它根据消息的类将传入的消息映射到匹配的读取器。所有消息类型都实现了接口消息。读取器在映射器类中注册,声明它将能够处理哪些消息类型。这些信息需要以某种方式存储在消息阅读器中,我的方法是从构造函数设置一个private final数组。

现在,我似乎对泛型和/或数组有一些误解,我似乎无法弄清楚,请参见下面的代码。那是什么?

代码语言:javascript
复制
public class HttpGetMessageReader implements IMessageReader {
    // gives a warning because the type parameter is missing
    // also, I actually want to be more restrictive than that
    // 
    // private final Class[] _rgAccepted;

    // works here, but see below
    private final Class<? extends IMessage>[] _rgAccepted;

    public HttpGetMessageReader()
    {
        // works here, but see above
        // this._rgAccepted = new Class[1];

        // gives the error "Can't create a generic array of Class<? extends IMessage>"
        this._rgAccepted = new Class<? extends IMessage>[1];

        this._rgAccepted[0] = HttpGetMessage.class;
    }
}

ETA:正如cletus正确指出的那样,最基本的谷歌搜索表明Java不允许泛型数组。对于给出的示例,我绝对理解这一点(比如E[] arr = new E[8]__,其中E是周围类的类型参数)。但是为什么允许使用new Class[n]呢?那么,做这件事的“适当”(或至少是常见)方式是什么呢?

EN

Stack Overflow用户

发布于 2009-05-22 11:02:55

,那么做这件事的“适当”(至少是常见的)方式是什么呢?

代码语言:javascript
复制
@SuppressWarnings(value="unchecked")
public <T> T[] of(Class<T> componentType, int size) {
    return (T[]) Array.newInstance(componentType, size);
}

public demo() {
    Integer[] a = of(Integer.class, 10);
    System.out.println(Arrays.toString(a));
}
票数 3
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/897251

复制
相关文章

相似问题

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