我需要在Java中创建一个动态数组,但值类型从String到Int不同于float。如何创建一个动态列表,我不需要在高级中给出值的类型?
键只需要升序(1,2,3,4或0,1,2,3,4)
我检查了ArrayList,但似乎我必须给它一个固定类型的值。
谢谢!
答案 0 :(得分:4)
您可以拥有一个数组或ArrayList
Objects
,这样您就可以包含String
,int
和float
元素。
答案 1 :(得分:2)
您可以使用:
List<Object> myList = new ArrayList<Object>();
Integer i = 1;
Double d = 1.2;
String s = "Hello World";
myList.add(i);
myList.add(d);
myList.add(s);
答案 2 :(得分:2)
根据我的经验,很少需要List<Object>
。我认为它可能是一种设计气味,我会检查设计,看看另一组结构是否可以更好地代表您的数据。在不知道你想要解决什么的情况下,很难有信心地说,但通常一个人想要把事情放在一个列表中做什么,并且只要它们只是{{{{{{{ 1}},你需要检查他们的类型并获得反思,以摆脱语言基础。将它们存储在更多类型敏感的结构中,您可以在其中以原始类型直接处理它们而不会产生反射魔法。
答案 3 :(得分:1)
它比它的价值更麻烦,但它可以反射地与数组交互。
import java.lang.reflect.Array;
// ...
Object arr = Array.newInstance(int.class, 10);
System.out.println(arr.getClass().getName()); // prints "[I"
System.out.println(Array.getLength(arr)); // prints "10"
Array.set(arr, 5, 42);
if (arr instanceof int[]) {
int[] nums = (int[]) arr;
System.out.println(nums[5]); // prints "42"
}
请注意,在API中,您将数组作为Object
传递。这是因为Object
是所有数组类型的超类,无论是int[].class
还是String[][].class
。这也意味着编译时安全性很小(一般情况下反射也是如此)。 Array.getLength("mamamia")
编译得很好;它会在运行时抛出IllegalArgumentException
。