请看下面的示例代码:
Object o1= new Integer(4);
ArrayList<Integer> list=new ArrayList<>();
list.add((Integer) o1);
相反,我喜欢做类似的事情:
Object o1= new Integer(4);
ArrayList<o1.getClass().getSimpleName()> list=new ArrayList<>();
list.add((o1.getClass().getSimpleName()) o1);
o1.getClass().getSimpleName()
返回&#34;整数&#34;作为一个Java.lang.String
对象,我的问题是如何将这个字符串嵌入到我的代码中,以及如何使用反射,以便列表中的项类型可以在运行时确定。
可以通过switch语句执行此操作,如:
Object o1= new Integer(4);
switch(o1.getClass().getSimpleName()){
case "Integer":
ArrayList<Integer> list=new ArrayList<>();
list.add((Integer) o1);
case "String":
/* some code */
}
但我希望有更好的解决方案。
答案 0 :(得分:0)
由于type erasure,这是不可能的。你可以做的是有这样一个列表:
List<Object> list = new ArrayList<>();
list.add(12);
list.add("String");
所以这样你可以在列表中找到你想要的任何对象
答案 1 :(得分:0)
正如@Mibac所说,你不能以这种方式创建列表。
你可以做的是&#34;铸造&#34;使用Stream API,如果您100%确定列表中的所有对象具有相同的类型:
Object o1 = new Integer(2);
List<Object> someList = new ArrayList<>();
someList.add(o1);
List<Integer> anotherList = new ArrayList<>();
anotherList.addAll(someList.stream().map(o -> (Integer) o).collect(Collectors.toList()));
System.out.println(anotherList);