如何使用Class对象作为类型参数创建Java泛型对象?

时间:2010-12-03 19:20:35

标签: java generics

例如,

// full_class_name is something like "java.lang.String"

Class<?> cls = Class.forName(full_class_name);

然后我想创建一个“cls”对象的Vector。那可能吗?矢量肯定不起作用。我不想要一般的Vector<?>对象。

我是Java新手。感谢。

3 个答案:

答案 0 :(得分:1)

Java Generics仅在编译时适用,这要归功于 type erasure 。这意味着如果您在编译时不知道要将哪个对象存储在集合中,那么泛型无法帮助您。

从编码的角度来看,你可以创建Vector<Object>来获得一个不受限制的Vector,它不会给出编译时警告。

顺便提一下,Vector是一个旧的集合,并且更好的替换为像ArrayList这样的新类型。

答案 1 :(得分:0)

Vector<Class<?>> v

将是未知类型的向量;

Vector<Class<String>>

将是String.class对象的向量; This doc在类型令牌上有更多,我认为这是你需要的。我没有看到只有一种类型的Class对象的集合是有意义的,你想要完成什么?

答案 2 :(得分:0)

通常,如果在创建向量之前不知道对象类,则没有其他选择,但是原始Vector(但它给出了ide警告)或Vector。但如果您在编译时知道该类,则应该使用它:

Vector<MyClass>