通用向量到强类型数组

时间:2012-03-01 11:04:16

标签: java android vector

我有一些方法可以返回带有一些数据的通用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

1 个答案:

答案 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;
}