比如这个类的成员有
class B
{
    A[]  Aset;     //某个类对象组成的数组
    int name;
}B b = new B();
下面一个是获取这个对象的引用,获取它的数据成员的方法
void receive_1(ObjectReference r){
    B second_b = new B();                   //由传过来的r建立新的对象
    Field t1 = or.referenceType().fieldByName("name");
    Value t1_v = or.getValue(t1);                  
    second_b.name = ((IntegerValue)t1_v).value();  //转化为Int型    Field t2 = or.referenceType().fieldByName("Aset");
    Value t2_v = or.getValue(t2);                  
    List<A> L2 = (List<A>)t2_v;       //这一步和下一步运行出错,
    second_b.Aset = (A[])L2.toArray();     //不知道怎么将获取到的数组的Value还原出来
    
    
}

解决方案 »

  1.   

    后面那函数我没看明白,按楼主要求写了一个简单的例子共楼主参考。package org.reflection.answer;import java.lang.reflect.Field;
    import java.util.Arrays;
    import java.util.List;class A
    {
    private String name;
    private Integer age; public A()
    {
    super();
    } public A(String name, Integer age)
    {
    super();
    this.name = name;
    this.age = age;
    } public String getName()
    {
    return name;
    } public void setName(String name)
    {
    this.name = name;
    } public Integer getAge()
    {
    return age;
    } public void setAge(Integer age)
    {
    this.age = age;
    }}class B
    {
    private A[] Aset;
    private int name; public A[] getAset()
    {
    return Aset;
    } public void setAset(A[] aset)
    {
    Aset = aset;
    } public int getName()
    {
    return name;
    } public void setName(int name)
    {
    this.name = name;
    }}public class ReflectionAnswer
    { public static void main(String[] args)
    {
    B b = new B();
    b.setName(100);
    b.setAset(new A[] { new A("1", 10), new A("2", 20), new A("3", 30) }); Class<?> cs = b.getClass();
    try
    {
    Field fe_name = cs.getDeclaredField("name");
    Field fe_aset = cs.getDeclaredField("Aset");
    fe_name.setAccessible(true);
    fe_aset.setAccessible(true);
    try
    {
    A[] oj = (A[]) fe_aset.get(b);
    List<A> lst = Arrays.asList(oj);
    for (A a : lst)
    {
    System.out.println(a.getName() + ":" + a.getAge());
    }
    System.out.println(fe_name.get(b));
    }
    catch (IllegalArgumentException e)
    {
    e.printStackTrace();
    }
    catch (IllegalAccessException e)
    {
    e.printStackTrace();
    }
    }
    catch (SecurityException e)
    {
    e.printStackTrace();
    }
    catch (NoSuchFieldException e)
    {
    e.printStackTrace();
    } }}
    ps,也可以通过Method,然后调用invoke()方法,那样就不用setAccessible了。