我在下面有这个代码(反序列化一个类):
....
Type type = field.getGenericType();
if (type instanceof ParameterizedType) {
ParameterizedType ptype = (ParameterizedType) type;
if(c.getSimpleName().equals("Vector")){
Class pta = (Class) ptype.getActualTypeArguments()[0];
Vector<what to put here> v = (Vector)field.get(obj);
if(v == null){
v = new Vector<what to put here>();
field.set(obj, v);
}
....
我的问题是如何更改Vector以获取某种类型的数据,只需知道之前所用的类名(pta var)?
答案 0 :(得分:5)
泛型在编译时解析,因此无法按照列出的方式执行此操作。只需使用Vector<Object>
或Vector
答案 1 :(得分:2)
使用Vector
代替Vector<what to put here>
将有效。无论如何,在运行时使用generic erasure逻辑,你的向量将不再具有指定的类型。
关于与基元类型相关的注释,请注意您甚至无法将基元类型插入Vector
。从javadoc:“Vector类实现了一个可增长的对象数组”。当您添加基元时,autoboxing用于将它们转换为对象计数器部分。