我有一个类,它根据消息的类将传入的消息映射到匹配的读取器。所有消息类型都实现了接口消息。读取器在映射器类中注册,声明它将能够处理哪些消息类型。这些信息需要以某种方式存储在消息阅读器中,我的方法是从构造函数设置一个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是周围类的类型参数)。但是为什么允许使用new Class[n]呢?那么,做这件事的“适当”(或至少是常见)方式是什么呢?
发布于 2009-05-22 11:02:55
,那么做这件事的“适当”(至少是常见的)方式是什么呢?
@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));
}https://stackoverflow.com/questions/897251
复制相似问题