将泛型类型作为参数传递给java?

时间:2012-11-27 08:10:47

标签: java generics

是否可以在变量中保存类型,
为了实例化这种类型的List?

//something like that
Type type = Boolean;
List<type> list = new List<type>();
list.add(true);

3 个答案:

答案 0 :(得分:4)

对于第一个要求,您正在寻找Class

Class type = Boolean.class;

但是,我不认为秒要求是可行的,因为泛型类型仅存在于编译时:

List<type> list = new List<type>(); // invalid code

但是,您可以使用List<Object>。它将接受Boolean个对象。这是否会给你带来任何不合理的取决于你的用例。

答案 1 :(得分:1)

Generic是一个编译时功能,而不是运行时,所以你不能使用变量来确定泛型类型,即使使用NPE的注释(使用Class)也不会编译:

Class<?> type = Boolean.class;
// can't do that...
List<type> list = new List<type>();
list.add(true);

答案 2 :(得分:1)

在第二种情况下,为什么在类型未知时想要使用泛型?你可以更好地使用非泛型arraylist(在jdk 5之前使用)。

   List a = new ArrayList();
   a.add(object);

更高版本仍然支持此样式,甚至在编译后,泛型样式也会转换为此表单。您将在上面的代码中收到警告,您可以禁止它。