黑马程序员技术交流社区
标题:
反射操作数组问题
[打印本页]
作者:
杨盼
时间:
2012-2-25 21:43
标题:
反射操作数组问题
在反射中,可以利用Object输出一维数组,部分代码,如下
public static void print(Object obj){
Class<?> c=obj.getClass();
if(!c.isArray()){
return ;
}
Class<?> arr=c.getComponentType();
System.out.println(arr.getName()+"长度是:"+Array.getLength(obj));
for(int x=0;x<Array.getLength(obj);x++){
System.out.print(Array.get(obj, x)+"、");
}
}
此时Object对象表示整个一维数组,如果换成二维,或者多维的,怎么利用Object输出二维数组,还是反射只能操作一维数组,查了很多都没有找到关于发射操作二维以上数组的,知道的答案的请不吝赐教啊~~~~谢谢啦
作者:
tanlei200620
时间:
2012-2-25 23:08
改进代码,如下:
public static void print(Object obj){
Class<?> c=obj.getClass();
if(c.isArray()){
Class<?> arr = c.getComponentType();
System.out.println(arr.getName()+"长度是:"+Array.getLength(obj));//打印了数组名称和 长度,但是长度的出现是通过Array的静态方法。
if(arr.isArray()){
for(int x=0;x<Array.getLength(obj);x++){
Object temp = Array.get(obj, x) ;
print(temp);
System.out.print(Array.get(obj, x)+"、");
}
}
else
return ;
}
}
测试代码:
String[][][] a = {{{"ss"}}};
print(a);
结果为:
[[Ljava.lang.String;长度是:1
[Ljava.lang.String;长度是:1
java.lang.String长度是:1
[Ljava.lang.String;@6bade9、[[Ljava.lang.String;@166afb3、
思路就是用了递归方法,但是有一个地方要注意,就是要用到获取数组元素的 引用 并进行 函数传值 来完成递归的调用。
作者:
tanlei200620
时间:
2012-2-26 00:59
在网吧很痛苦啊,周围尽是吵闹声。。。。。。。。。所以代码的改进这么久才出来。如下:
private static void print(Object obj, int tint) {
Class<?> clazz = obj.getClass();
if (clazz.isArray()) {
System.out.println("这是第"+tint+"层数组:"+obj+"长度:"+Array.getLength(obj)+"类型:"+obj.getClass().getComponentType());
tint++;
for (int i = 0; i < Array.getLength(obj); i++) {
Object temp = Array.get(obj, i);
print(temp, tint);
}
} else {
System.out.println("第" +tint+"层元素:("+obj+")结束");
}
}
public static void print(Object obj) {
print(obj, 1);
}
测试代码如下:
String[][] a = { { "a", "b", "c" }, { "d", "e" }, { "f" } };
print(a);
打印结果:
这是第1层数组:[[Ljava.lang.String;@119dc16长度:3类型:class [Ljava.lang.String;
这是第2层数组:[Ljava.lang.String;@c05d3b长度:3类型:class java.lang.String
第3层元素:(a)结束
第3层元素:(b)结束
第3层元素:(c)结束
这是第2层数组:[Ljava.lang.String;@128f6ee长度:2类型:class java.lang.String
第3层元素:(d)结束
第3层元素:(e)结束
这是第2层数组:[Ljava.lang.String;@6bade9长度:1类型:class java.lang.String
第3层元素:(f)结束
建议贴主命名的时候一定要注意,否则自己的思路容易被打乱。
作者:
杨盼
时间:
2012-2-26 11:21
看着很代码很多,还用到两个函数,我稍微改了下,比较简洁了,如下
public static void printTemp(Object obj){
Class<?> c=obj.getClass();
if(c.isArray()){
System.out.println();
for(int y=0;y<Array.getLength(obj);y++){
Object temp=Array.get(obj, y);
printTemp(temp); //递归调用
//System.out.print(Array.get(obj, y)+"、");
}
}else
System.out.print(obj); //打印数组
}
测试的例子:
int[][] t={{1,2,3},{4,5,6},{7,8,9,0}};
printTemp(t);
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2