有一个多维String
数组作为Object
传递。
我应该“展开”它并处理它的每个原始条目。
除了查看Object
本身之外,没有其他方法可以知道尺寸。
我遇到的困难在于铸造。我可以通过调用其getClass().getName()
并在其中计算[
-来查找数组维度。
但是接下来如何投射呢?
String[] sa = (String[]) arr;
正在给予
Exception in thread "main" java.lang.ClassCastException: [[Ljava.lang.String; cannot be cast to [Ljava.lang.String;
可以在不使用反射的情况下进行投射吗?
注意-数组可以是任意尺寸-不只是1或2。
TIA。
答案 0 :(得分:4)
如果要使用在编译时未知维的数组,我建议您递归地处理其所有条目,而不要尝试对其进行强制转换。
您可以使用object.getClass().isArray()
方法检查当前条目是否为数组,然后使用Array.getLength(object)
和Array.get(object, i)
在其上进行迭代:
public static void main(String[] args) {
Object array = new String[][] {new String[] {"a", "b"}, new String[] {"c", "d"}};
processArray(array, System.out::println);
}
public static void processArray(Object object, Consumer<Object> processor) {
if (object != null && object.getClass().isArray()) {
int length = Array.getLength(object);
for (int i = 0; i < length; i ++) {
Object arrayElement = Array.get(object, i);
processArray(arrayElement, processor);
}
} else {
processor.accept(object);
}
}
答案 1 :(得分:0)
如果数组的大小不是静态的(在编译时),则从逻辑上讲不可能完全依靠静态手段来获得长度,即不使用动态手段。
也许这个问题有您需要的解决方案: Getting the field "length" in a Java array using reflection