具有多种数据类型的Java数组

问题描述 投票:0回答:4

我可以用什么来存储多种不同类型的数据,Int/String/等?我有 PHP 背景,我可以将不同类型的数据存储到数组中,但我不知道如何在 Java 中做到这一点。

举这个例子:

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

我怎样才能用Java制作类似的东西?

java
4个回答
27
投票

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;

4
投票

您可以使用对象数组,但这会在检索已存储的对象时产生问题。相反,我会使用“类型安全的异构容器”,如《Effective Java》中所述(并链接到本句前面的内容)。 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>
,知道其中包含的所有物品都属于同一类别。
    


0
投票
这篇文章本来就比较简单

您可以使用内置的

Object

类来创建支持字符串、整数等的数组

示例:

Object[] x = {"Item 1", 2, null, true};



0
投票

int[] array1 = new int[]{1, 2, 3, 4, 5}; String[] array2 = new String[]{"aa", "bb", "cc", "dd", "ee"}; var array3 = new Object[(array1.length + array2.length)]; for (int i = 0; i < array1.length; i++) { array3[i] = array1[i]; } for (int i = array1.length, j = 0; i < array1.length + array2.length; i++, j++) { array3[i] = array2[j]; } for(var i:array3) System.out.println(i);

	
© www.soinside.com 2019 - 2024. All rights reserved.