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