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

由于泛型主要是仅编译时的构造,因此您不能基于运行时提供的 a来实例化泛型类型参数(在本例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 回答