提取封装在Object中的数组

时间:2012-10-06 09:49:03

标签: java arrays object

假设我有一个封装在对象中的数组:

String[] strvls = { "Alessio", "Ale" };
Object container = strvls;

我想从容器对象中提取数组,我该怎么办?

我知道这是一个以这种方式检查的数组:

if(container.getClass().isArray()) {
    //Extract the encapsulated array - How ?
}

我无法强制转换为String数组,因为我无法确定数组的类型是String[] ...所以我需要强制转换为泛型类型数组,是否可能在Java?

3 个答案:

答案 0 :(得分:6)

您可以将其强制转换为Object[]数组:

String[] strvls = { "Alessio", "Ale" };
Object container = strvls;
if (container.getClass().isArray()) {
    Object[] data = (Object[]) container;
    System.out.println(data.length);
}

答案 1 :(得分:2)

与Karaszi的答案类似,但捷径可能是:

if(container instanceof Object[])
  System.out.println("Array size: " + ((Object[])container).length);

重要提示:这对原始数组不起作用。上面的代码可以工作,因为String派生自Object类。

答案 2 :(得分:0)

你可以有这样一种方法:

private static <T> T[] getArray(Object o){
    return (T[]) o;
}

这将有助于使用泛型类型,您可以保留此方法中封装的任何“未经检查”的编译器警告。然后你可以这样做:

Object[] array = getArray(container);

如果您对该类型一无所知,或者:

String[] array = getArray(container);

如果你知道它是一个字符串数组。