这样的数组的值该怎么取??

大蚂虾 2010-12-29 06:02:44

public class Test {
char c1[] = { 'a', 'b', 'c', 'd' };

public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
char[] c2 = { 'a', 'b', 'c' };
Object obj1 = c2;

Test test = new Test();
Field[] fields = test.getClass().getDeclaredFields();
Object obj2 = fields[0].get(test);
}
}


这个obj1中的值该怎么取呢??

同理,obj2的值该怎么取的???

我System.out.println(obj2.getClass().isArray());打印出来是true,说明这个数组没问题
...全文
144 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaoweijq 2011-01-06
  • 打赏
  • 举报
回复
        char[] c2 = { 'a', 'b', 'c', 'd' };
Object obj1 = c2;
for(int i=0;i<Array.getLength(obj1);i++) {
System.out.println(Array.get(obj1, i));
}

不如试试这样
大蚂虾 2011-01-06
  • 打赏
  • 举报
回复
其实我的想法是这样的

public static void test(Object obj) throws IllegalArgumentException, IllegalAccessException {
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
// 打印obj的属性及其值
System.out.println(field.getName() + ":" + field.get(obj));
}
}

就是数组里的东西得不到
大蚂虾 2011-01-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yaoweijq 的回复:]
Java code
char[] c2 = { 'a', 'b', 'c', 'd' };
Object obj1 = c2;
for(int i=0;i<Array.getLength(obj1);i++) {
System.out.println(Array.get(obj1, i));
}

……
[/Quote]

成。。。能取到东西!~~结贴
  • 打赏
  • 举报
回复
个人觉得笔者这个问题有些牵强,

用泛型

对于第一个obj1,既然要得到值就直接传个对象就行了;

对于第二个obj2,还是可以得到它的值的,因为,obj2中的数据是通过类的初始化来得到的(在obj1中如果

char[] c2是成员变量 而且 char[] c2 = { 'a', 'b', 'c' }; 放在它的无参构造函数中,那就也能得

到)

Field[] fields = test.getClass().getDeclaredFields();
for (Field field : fields) {
System.out.println(field);
Test test1 = Test.class.newInstance();
System.out.println(Arrays.toString((char[])field.get(test1)));

}
eXeSP 2010-12-29
  • 打赏
  • 举报
回复
这样感觉有点麻烦,比如8是一个整数,但很难通过一个整数来取得8。
大蚂虾 2010-12-29
  • 打赏
  • 举报
回复
我要写个方法,要取出不同类对象的属性的值

我不能确定这些对象属性是什么类型

别的都能取,就这个基本类型数组取不到!~~
大蚂虾 2010-12-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 inhibitory 的回复:]
Java code
import java.lang.reflect.Field;
import java.util.Arrays;

public class Test {
char c1[] = { 'a', 'b', 'c', 'd' };

public static void main(String[] args) throws IllegalArgumen……
[/Quote]

就像我第二个问题一样,如果你不知道数组里存的是什么类型呢??
goodsun00 2010-12-29
  • 打赏
  • 举报
回复
System.out.print((char[]) obj1);
System.out.print((char[]) obj2);

要转下 不然Object没法读
大蚂虾 2010-12-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zidasine 的回复:]
if(obj2.getClass().isArray())
Object[] xxx=(Object[])obj1;
然后遍历
[/Quote]

你试过了么??这个数组存的是基本类型。。不要想当然
Exception in thread "main" java.lang.ClassCastException: [C cannot be cast to [Ljava.lang.Object;
at renshang.action.util.Test.main(Test.java:12)
Inhibitory 2010-12-29
  • 打赏
  • 举报
回复
import java.lang.reflect.Field;
import java.util.Arrays;

public class Test {
char c1[] = { 'a', 'b', 'c', 'd' };

public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
char[] c2 = { 'a', 'b', 'c' };
Object obj1 = c2;

c2 = (char[]) obj1; // Java里数组也是对象
System.out.println(Arrays.toString(c2));

Test test = new Test();
Field[] fields = test.getClass().getDeclaredFields();
Object obj2 = fields[0].get(test);
}
}
zidasine 2010-12-29
  • 打赏
  • 举报
回复
if(obj2.getClass().isArray())
Object[] xxx=(Object[])obj1;
然后遍历

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧