代码背景,我有一个抽象类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会自己判断它的类型),所以想问一下这种情况下如何解决?请老鸟帮助,谢谢
/**
* <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会自己判断它的类型),所以想问一下这种情况下如何解决?请老鸟帮助,谢谢
这里不一定会用到Humanbeing类,具体会用哪个类是不确定的
你本应该这样写的
Humanbeing[] mans = new Humanbeing[] { new Man_(), new Man_()};
System.out.println("Y");
}
或者
if ( mans instanceof Humanbeing[]) {
System.out.println("Y");
}都行吧。
java反射还是很强的