具有多种数据类型的Java Array

时间:2014-05-30 14:58:11

标签: java

我可以用什么来存储多种不同类型的数据,Int / String /等?我来自PHP背景,我可以将不同类型的数据存储到数组中,但我不知道如何在Java中执行此操作。

举个例子:

$array = array(
    "val1" => 1,
    "val2" => "cat",
    "val3" => true
);

如何在Java中创建类似的内容?

3 个答案:

答案 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};