Reputation: 36299
What can I use to store multiple different types of data, Int/String/etc.? I come from a PHP background where I can store different types of data into an array, but I don't know how to do that in Java.
Take this example:
$array = array(
"val1" => 1,
"val2" => "cat",
"val3" => true
);
How can I make something similar in Java?
Upvotes: 14
Views: 50185
Reputation: 695
I have created an array (array3 with type var from Java 10+ ) to hold values from two different data types integers and Strings:
var array3 = new Object[]{1,10,"abc", "100", 30};
for(var i:array3)
System.out.println(i);
Output is:
1
10
abc
100
30
Upvotes: 0
Reputation: 405
This post is meant to be a simpler one
You can use the built-in Object
class to create an array that supports Strings, Integers, etc.
Example:
Object[] x = {"Item 1", 2, null, true};
Upvotes: 0
Reputation: 7663
You could use an object array but that creates problems when the time comes to retrieve the objects you have stored. Instead I would use a typesafe heterogenous container as described in Effective Java (and linked to earlier in this sentence).
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));
}
}
The typesafe heterogenous container solves the problem of retrieving objects later by mapping objects by their class. In your case I would combine this with other data structures - for example List<Date>
, List<String>
, or List<Integer>
, as the base classes to provide a way to store multiple different kinds of objects in one collection. Then to retrieve values you would simply get the sub collection, e.g. a List<Date>
, knowing that all items contained therein were of the same class.
Upvotes: 4
Reputation: 13596
Java is a strongly typed language. In PHP or Javascript, variables don't have a strict type. However, in Java, every object and primative has a strict type. You can store mutliple types of data in an Array, but you can only get it back as an Object.
You can have an array of Objects:
Object[] objects = new Object[3];
objects[0] = "foo";
objects[1] = 5;
Note that 5 is autoboxed into new Integer(5)
which is an object wrapper around the integer 5.
However, if you want to get data out of the array, you can only get it as an Object. The following won't work:
int i1 = objects[1]; // Won't work.
Integer i2 = objects[2]; // Also won't work.
You have to get it back as an Object:
Object o = objects[0]; // Will work.
However, now you can't get back the original form. You could try a dangerous cast:
String s = (String) o;
However you don't know that o
is a String.
You can check with instanceof
:
String s = null;
if (o instanceof String)
s = (String) o;
Upvotes: 28