我有一些方法可以返回带有一些数据的通用Vector。如何在运行时获取此Vector子类型?我花了最后一天试图在Java文档和谷歌中找到解决方案。 当我尝试做,即:
Vector<String> myVector = new Vector<String>();
//here I fill array with data
.......
// here I my code don't know now what is element type of
// myVector and need to get it in some way
Class<?> baseClass = myVector.toArray().getClass().getComponentType();
最后一行返回Object
。
答案 0 :(得分:0)
通用参数类型(如<String>
)仅在编译期间存在,并且将获得类型擦除,因此仅剩Object
。
好的,可以选择最专业的普通班:
public Class<?> commonComponentClass(Collection<?> collection) {
Class<?> klazz = null;
for (Object item : collection) {
if (item == null)
continue;
Class<?> itemKlazz = item.getClass();
if (klazz == null) {
klazz = itemKlazz;
} else {
while (klazz != itemKlazz) {
if (itemKlazz.isAssignableFrom(klazz)) {
klazz = itemKlazz;
break;
} else if (klazz.isAssignableFrom(itemKlazz)) {
break;
}
if (itemKlazz != Object.class)
itemKlazz = itemKlazz.getSuperclass();
if (klazz != Object.class)
klazz = klazz.getSuperclass();
}
}
}
if (klazz == null) {
klazz = Object.class;
}
return klazz;
}