2012-03-01 12 views
0

私はいくつかのデータを持つ汎用ベクターを返すメソッドを持っています。実行時にこのVectorの子要素の型を取得するにはどうすればよいですか?私は最後の日に、JavaのドキュメントとGoogleのソリューションを見つけようとしています。 私はすなわちを行う試す:一般的なベクターから強い型付きの配列へ

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を返します。 <String>よう

+0

は、それは 'Vector'が空でないことをケースですか? – hmjd

答えて

0

ジェネリックパラメータの型はコンパイル時にのみ存在し、型消去、これだけObject遺骨を取得します。

さて、1は最も専門的な一般的なクラスを取ることがあります。

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; 
} 
関連する問題