代码背景,我有一个抽象类humanbeing,还一个具体类man继承于它,在类family中,有一个humanbeing[] persons实例变量表示所有的家庭成员,而现在我要通过反射为这个实例变量赋一个man[]数组值,但是在调用Field.set(Object,Object)方法时发生了参数异常之前有朋友给我写了可以通过的演示代码.如下:
/**
 * <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 {
}
这是可以通过的,但是和我的代码比较了一下,代码区别在这里:package example;import java.lang.reflect.*;/**
 * <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);
        Object mans = new Object[] { new Man_(), new Man_()};      //这里是new Object[]
        field.set(test, mans);                                     //这种情况下这里就会报参数错误
        System.out.println(test.persons.length);
    }}abstract class Humanbeing {
}class Man_ extends Humanbeing {
}
因为代码中对象的类类型是不定的,所以没有办法把她固定为某个类型,而问题又在他是数组(如果不是数组java会自己判断它的类型),所以想问一下这种情况下如何解决?请老鸟帮助,谢谢

解决方案 »

  1.   

    Object mans = new Humanbeing[] { new Man_(), new Man_()};
      

  2.   


    这里不一定会用到Humanbeing类,具体会用哪个类是不确定的
      

  3.   

    怎么可能不确定呢?字段类型是死,不会变的啊。不可能在一个类型为 Humanbeing 的字段中硬塞一个 String 类型的数据吧。
      

  4.   

    如果塞了String我可以抛异常,现在的问题是我输的值肯定和字段类型是一致的,但是获得的时候只能以Object[]形式,所以就出问题,问有什么方法可以解决
      

  5.   

    变相解决下,给那个类添加个set方法,然后调用set方法,java是精态语言,限制会多一些。
      

  6.   

    不用加set方法了
    你本应该这样写的
            Humanbeing[] mans = new Humanbeing[] { new Man_(), new Man_()};
      

  7.   

    判断是否是数组的方法        if ( mans instanceof Object[]) {
             System.out.println("Y");
    }
    或者
            if ( mans instanceof Humanbeing[]) {
             System.out.println("Y");
    }都行吧。
    java反射还是很强的