2012-03-01 152 views
0

我有一個方法,它返回一般數據的向量。如何在運行時獲取此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

是它的'VECTOR'不會是空的情況? – hmjd 2012-03-01 11:12:22

回答

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