假如我们需要一个公共的方法print(Object obj)用来打印对象的信息,如果我们传入的参数obj为数组类型,我们该怎么办呢,下面和大家分享一下:
import java.lang.reflect.Array;
public class TestArrayReflect {
public static void main(String[] args) {
String[] arr=new String[]{"aaa","bbb","ccc"};
String s="123";
//第一种打印对象信息的方法
print1(arr);
print1(s);
System.out.println("----------------");
//第二种打印对象信息的方法
print2(arr);
System.out.println();
print2(s);
}
/**
* 打印对象信息的方法1
* @param obj
*/
public static void print1(Object obj){
System.out.println(obj.toString());
}
/**
* 打印对象的信息方法2
* @param obj
*/
public static void print2(Object obj){
Class cls=obj.getClass();
//如果该对象是数组
if(cls.isArray()){
//得到该数组的长度
int length=Array.getLength(obj);
//输出数组中每个元素
for(int i=0;i<length;i++){
System.out.print(Array.get(obj, i)+" ");
}
}else{
System.out.println(obj.toString());
}
}
}
运行结果如下:
[Ljava.lang.String;@de6ced
123
----------------
aaa bbb ccc
123
从结果中可以看到print1方法打印出的对象信息,什么东东啊,显示不是我们想要的,而使用反射实现的print2方法打印出的对象信息才是我们想要的。
可见虽然反射在实际工作中用的不太多,但是在处理一些特殊问题的时候,还是能发挥神奇作用的。