类对象的Java矢量

时间:2012-08-19 23:45:58

标签: java

我想动态创建自定义类对象的向量。当程序运行时,tableClassName变量包含从xml请求中获取的类名。当我尝试以下方式时,它给了我一个错误。

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

2 个答案:

答案 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());