代码背景,我有一个抽象类humanbeing,还一个具体类man继承于它,在类family中,有一个humanbeing[] persons实例变量表示所有的家庭成员,而现在我要通过反射为这个实例变量赋一个man[]数组值,但是在调用Field.set(Object,Object)方法时发生了参数异常,代码情况如下:
[code]
String fldName=child.getName();        //字段名称
Object value=this.tranObject(value, child);   //获得要赋的值,这里跟断点value确定已经获得了man[]数组
Field f=this.objRef.getField(fldName, object.getClass());  //获得字段,已经确定获得了persons字段,类型为humanbeing[]
f.setAccessible(true);
f.set(object, value);                  //往类型为humanbeing[]的persons字段中赋man[]类型的值,结果发生参数异常错误
[/code]不知道问题出在哪里,请老鸟提点,谢谢了

解决方案 »

  1.   

    一???奇怪,怎么加了个[code][/code]代码就没了??????怎么编辑啊
      

  2.   

    按那个有#号的图标,也就是第7个图标,选Java,然后把代码复制到中间就可以了...
      

  3.   

    靠!还不能编辑,代码如下:代码背景,我有一个抽象类humanbeing,还一个具体类man继承于它,在类family中,有一个humanbeing[] persons实例变量表示所有的家庭成员,而现在我要通过反射为这个实例变量赋一个man[]数组值,但是在调用Field.set(Object,Object)方法时发生了参数异常,代码情况如下: Object value=null;
    String fldName=child.getName();          //字段名
    value=this.tranObject(value, child);     //要赋的值,已经跟过断点,确定能够获得一个man[]对象
    Field f=this.objRef.getField(fldName, object.getClass());  //要赋值的字段,已经确定获得persons
    f.setAccessible(true);
    f.set(object, value);                    //向humanbeing[]类型的persons实例变量中赋入man[]类型的值,
                                               就在这步发生了参数异常的错误不知道问题出在哪里,请老鸟提点,谢谢了
      

  4.   

    我看了一下,你的object是humanbeing型的,而你想把man型的child的值赋给object,我理解的对吗?
      

  5.   

    你不行先把man型的传给man型,然后再直接赋值给humanbeing型的,不要直接一步复制给man的父类。这样就不会报参数不匹配的错误了吧?
      

  6.   

    persons是humanbeing型,但是Field.set的参数都是Object型,作为所有类的父类,所以应该没有关系吧
      

  7.   

    你的结贴率不高啊,记得结贴.../**
     * <p>
     * Title:
     * </p>
     *
     * <p>
     * Description:
     * </p>
     *
     * <p>
     * Copyright: 转载请注明出处http://blog.csdn.net/sunyujia/
     * </p>
     *
     * @author 孙钰佳
     * @main [email protected]
     * @date Oct 1, 2008 10:25:47 PM
     */
    public class RelTest {
    Humanbeing[] persons; /**
     * Description:
     *
     * @param args
     * @throws NoSuchFieldException
     * @throws SecurityException
     * @mail [email protected]
     * @since:Oct 1, 2008 10:25:47 PM
     */
    public static void main(String[] args) throws Exception {
    RelTest test = new RelTest();
    Field field = RelTest.class.getDeclaredField("persons");
    field.setAccessible(true);
    Man[] mans = new Man[] { new Man(), new Man() };
    field.set(test, mans);
    System.out.println(test.persons.length); }}abstract class Humanbeing {
    }class Man extends Humanbeing {
    }