返回信息流有以下两个类:
第一个是Test:
public class Test {
public Test(){}
public static void say(){
System.out.println("This is just a test");
}
}
第二个类是Main:
public class Main{
public static void main(String[] args) {
ArrayList<Class<?>> methodArgTypes = new ArrayList<Class<?>>();
Method method;
try {
method = Test.class.getMethod("say", methodArgTypes.toArray(new Class<?>[methodArgTypes.size()]));
method.invoke(Test.class, new Object[] {});
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
没有去掉Test类里public static void say()函数中的static之前,一切都是运行完好的,打印出"This is just a test",去掉了static之后,即变成了public void say(),就会抛出异常,异常信息如下:
java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at Main.main(Main.java:14)
我想问下如果去掉了static,怎么改代码才能确保程序能够运行正确呢,谢谢
这是一条镜像帖。来源:北邮人论坛 / java / #26838同步于 2013/9/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
菜鸟请教一个java反射机制的问题
Ada2011
2013/9/17镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
十分感谢大神~~
【 在 spidercoco 的大作中提到: 】
: method.invoke(new Test(), new Object[] {});