我想动态创建自定义类对象的向量。当程序运行时,tableClassName变量包含从xml请求中获取的类名。当我尝试以下方式时,它给了我一个错误。
Class tableClass = Class.forName(tableClassName).asSubclass(comm.Table.class);
Vector<tableClass> MappingLookupResu = new Vector<tableClass>();
答案 0 :(得分:2)
这就像写mappingLookupResult = new Vector< String.class >();
mappingLookupResult = new Vector< String >();
是合法的,但是你提供了一个对象(“Class”类),而不是类定义。如果您的对象是“comm.Table”,请尝试:
mappingLookupResult = new Vector< comm.Table >();
或
mappingLookupResult = new Vector< ? extends comm.Table >();
另外 - 您是否因特定原因使用Vector
?如果不需要同步, ArrayList
会更快。
答案 1 :(得分: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());