比如这个类的成员有
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还原出来
}
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还原出来
}
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了。