Java添加到未知类型的通用列表

前端之家收集整理的这篇文章主要介绍了Java添加到未知类型的通用列表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Java中遇到了一些我以前没有遇到过的事情,也就是说,我需要在运行时创建一个新的ArrayList类实例,而不必分配一个已知的类型,然后将数据添加到列表中.听起来有点模糊,所以这里就是一个例子:
Class<?> c = i.getClass();

Constructor<?> con = ArrayList.class.getConstructor();
ArrayList<?> al = (ArrayList<?>)con.newInstance();

al.add("something");

现在我正在做这个,而不是使用泛型的原因是因为泛型已经被大量使用,并且这个例子中的“i”变量将被赋予使用类型“?”.我真的不会抛出另一个泛型,因为这将为用户带来更多的工作,在最终设计中将变得不那么灵活.有什么办法可以使用下面的东西(注意:下面的内容不起作用).有人有想法吗?

ArrayList<c> al = (ArrayList<c>)con.newInstance();

解决方法

您不能在使用通配符泛型定义的集合中添加对象. This thread可能会帮助你.

确实,你正在创建一个集合,是的,每个集合的超类型,因此可以分配给任何一类泛型;但是,由于编译器无法检查您要添加内容的类型,因此允许任何类型的添加操作是太通用的.这就是泛型是什么意思:类型检查.

我建议你阅读主题,看看它也适用于你想做的事情.

您的集合只是太通用,不允许添加任何内容.问题与对齐的右侧无关(使用单例或反射),它使用通配符在左侧声明类型.

猜你在找的Java相关文章