0

カスタムクラスオブジェクトのベクトルを動的に作成したいと思います。プログラムの実行中、tableClassName変数には、xmlリクエストから取得されたクラス名が含まれます。以下の方法を試してみると、エラーが発生します。

 Class tableClass = Class.forName(tableClassName).asSubclass(comm.Table.class);
 Vector<tableClass> MappingLookupResu = new Vector<tableClass>();
4

2 に答える 2

2

それは書くようなものですmappingLookupResult = new Vector< String.class >();

mappingLookupResult = new Vector< String >();合法ですが、クラス定義ではなく、(「クラス」クラスの) オブジェクトを提供しています。オブジェクトが「comm.Table」の場合は、次を試してください。

mappingLookupResult = new Vector< comm.Table >();

また

mappingLookupResult = new Vector< ? extends comm.Table >();

またVector、特定の理由で使用していますか? ArrayList同期が必要ない場合は高速です。

于 2012-08-20T00:00:04.227 に答える
1

ジェネリックは主にコンパイル時のみの構成であるため、実行時に提供される に 基づいてジェネリック型パラメーター (この場合Tは) をインスタンス化することはできません。Vector<T>String

とにかく意味がありません。あなたとやり取りする人は誰でもVector、具象型を使用してベクトルを処理するために必要な情報を持っていません。もしそうなら、彼らはClass<? extends Table>クラス名を提供する代わりにあなたに直接提供することができます.

ただし、ベクトル型パラメーターの上限が であることを確認できますTable。何をする必要があるかは、実際に をどのように操作しているかによって異なりますVector。たとえば、型の新しいインスタンスをそれに入れたい場合は、次のように入力する必要がありますtableClass

 Class<? extends Table> tableClass =      
     Class.forName(tableClassName).asSubclass(Table.class);
 Vector<Table> result  = new Vector<Table>();
 result.add(tableClass.newInstance());
于 2012-08-19T23:53:25.987 に答える