如何正确使用泛型类型的数组?
我有一个类,它根据消息的类将传入的消息映射到匹配的读者。所有消息类型都实现接口消息。读取器在映射器类中注册,说明它将能够处理哪些消息类型。此信息需要以某种方式存储在消息读取器中,我的方法是从构造函数设置一个数组。private final
现在,似乎我对泛型和/或数组有一些误解,我似乎无法弄清楚,请参阅下面的代码。这是什么?
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
是周围类的类型参数)。但是为什么允许新的 Class[n]
呢?那么,什么是“正确”(或至少是常见的)方法来做到这一点呢?