你如何实例化一个Java泛型对象是需要键入只给出一个Class
或Class<?>
对象参数的Java类型参数/通用?使用实例化一个Class对象
例如: 通常可以使用以下语法实例Integer
的ArrayList
的对象:
ArrayList<Integer> foo = new ArrayList<Integer>();
然而,在给定Class<?>
对象如Integer.class
,一个如何可以创建一个类似ArrayList
?例如,我怎么会做这样的事情(不正确的语法):
ArrayList<Integer.class> foo = new ArrayList<Integer.class>();
我需要这个东西非常不寻常的,我与Java做(创建可视化数据结构的用户提供的情况下,一个开源工具/他们写的泛型类)。下面是我将如何使用此代码示出了I将给予信息的示例:
import java.util.ArrayList;
import java.util.List;
public class ArrayListFromClass {
// obviously this code does not work
public static void main(String[] args) {
Object givenObject = new Integer(4);
// I would not know it is Integer.class, a Class<?> object would be supplied by the user/ as a generic
Class<?> cls = givenObject.getClass();
List<cls> bar = new ArrayList<cls>();
// Where args[0] is "Integer.class"
List<args[0]> foo = new ArrayList<args[0]>();
// then I would be able to add to foo or bar with one or both of these techniques:
// printing givenObject.getClass() gives you java.lang.Integer, don't worry about the casting not working.
bar.add(cls.cast(givenObject));
Integer y = 6;
bar.add(y);
}
}
如果向下票,请让我知道我可以在将来写出更好/更富有建设性的帖子,或者我怎么可以编辑这一项。我对SO很了解。 – BlueOxile
这不是一个可以使用Java泛型(编译时类型检查机制)的地方。既然你想能够存储任何类型,只需使用Object。然后,当迭代适当处理单个实例时,您还需要使用* reflection *。 –
这篇文章被低估了,因为之前已经被问过这么多次,而且你没有显示任何先前研究的证据。我真的很惊讶它是upvoted。 –