假设我有一个封装在对象中的数组:
String[] strvls = { "Alessio", "Ale" };
Object container = strvls;
我想从容器对象中提取数组,我该怎么办?
我知道这是一个以这种方式检查的数组:
if(container.getClass().isArray()) {
//Extract the encapsulated array - How ?
}
我无法强制转换为String数组,因为我无法确定数组的类型是String[]
...所以我需要强制转换为泛型类型数组,是否可能在Java?
答案 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);
如果你知道它是一个字符串数组。