Cra*_*lus 4 java reflection jvm classloader
如何使用反射调用已在JVM中加载的对象的方法?我试过了
Class myClass = Class.forName("myClass");
Method m = com.test.class.getDeclaredMethod("getValue",new Class[] {});
Object result = m.invoke(myClass,null);
Run Code Online (Sandbox Code Playgroud)
但我得到java.lang.IllegalArgumentException:object不是声明类的实例.我想调用的方法是void,即不接受参数
更新 我有一个已加载类"A"的应用程序.另一个类"B"将由框架实例化.初始化类"B"时,类"A"已经加载到JVM中.我想从类"A"BUT的加载实例中调用一个方法而不在类"B"中引用"A".在答案中,似乎我必须在类"B"中创建一个"A"的新实例,但我想要访问已经加载的对象.如果我在"B"中创建"A"的新实例,为什么我要使用反射?我想念一些东西吗?
谢谢
Lad*_*ein 11
你将Class的实例作为第一个参数传递给了Method.invoke(..),但那是错的; 你想传递你感兴趣的实例.
result = m.invoke(myInstance, null);
Run Code Online (Sandbox Code Playgroud)
我想你需要
Class myClass = myObject.GetClass();
Method m = com.test.class.getDeclaredMethod("getValue",new Class[] {});
Object result = m.invoke(myObject,null);
Run Code Online (Sandbox Code Playgroud)