我可以用什么来存储多种不同类型的数据,Int / String /等?我来自PHP背景,我可以将不同类型的数据存储到数组中,但我不知道如何在Java中执行此操作。
举个例子:
$array = array(
"val1" => 1,
"val2" => "cat",
"val3" => true
);
如何在Java中创建类似的内容?
答案 0 :(得分:13)
Java是一种强类型语言。在PHP或Javascript中,变量没有严格的类型。但是,在Java中,每个对象和主体都有严格的类型。您可以在数组中存储多种类型的数据,但只能将其作为对象获取。
您可以拥有一个对象数组:
Object[] objects = new Object[3];
objects[0] = "foo";
objects[1] = 5;
请注意,5被自动装箱到new Integer(5)
,这是整数5周围的对象包装。
但是,如果要从数组中获取数据,则只能将其作为Object获取。以下内容不起作用:
int i1 = objects[1]; // Won't work.
Integer i2 = objects[2]; // Also won't work.
你必须把它作为一个对象取回:
Object o = objects[0]; // Will work.
但是,现在你无法取回原始表格。你可以尝试一个危险的演员:
String s = (String) o;
但是你不知道o
是一个字符串。
您可以查看instanceof
:
String s = null;
if (o instanceof String)
s = (String) o;
答案 1 :(得分:3)
您可以使用对象数组,但在检索已存储的对象时会产生问题。相反,我会使用有效Java中描述的typesafe heterogenous container(并在本句前面链接)。
public class DateStuff{
private Map<Class<?>, Object> dateMap =
new HashMap<Class<?>, Object>();
public <T> void putDate(Class<T> type, T instance){
if(type == null)
throw new NullPointerException("Type null");
dateMap.put(type, instance);
}
public<T> getDate(Class<T> type){
return type.cast(dateMap.get(type));
}
}
类型安全异构容器通过按类映射对象解决了以后检索对象的问题。在您的情况下,我会将此与其他数据结构(例如List<Date>
,List<String>
或List<Integer>
结合起来作为基类,以提供将多种不同类型的对象存储在一个中的方法采集。然后要检索值,您只需获取子集合,例如a List<Date>
,知道其中包含的所有项目属于同一类。
答案 2 :(得分:0)
这篇文章旨在成为一个简单的文章
您可以使用内置的Object
类来创建支持字符串,整数等的数组。
示例:
Object[] x = {"Item 1", 2, null, true};