我有一个特定的要求,我需要加载一个类" abc"并调用方法" xyz"在运行期间?这可能吗?类文件是否应该出现在特定位置?
我正在尝试下面的代码但是得到了ClassNotFoundException
File file = new File("location of the class file");
URL url = file.toURI().toURL();
URL[] urls = new URL[] {url};
URLClassLoader myClass = new URLClassLoader(urls);
Class<?> methodClass = myClass.loadClass("classname");
Method method = methodClass.getDeclaredMethod(methodname);
答案 0 :(得分:1)
Reflection允许您通过指定类和方法的名称来创建实例并调用其方法。根据您的描述,您似乎想要这个功能。
让它更容易理解。你有反思课程
package com.reflect;
public class Reflect {
public void testMethod() { System.out.println("Test") }
}
然后你有了这个主类,你可以在这里调用这个方法:
package com.reflect.main;
import java.lang.reflect.Method;
public class ReflectApp {
public static void main(String[] args) {
Class noparams[] = {};
try{
//load the Reflect at runtime
Class cls = Class.forName("com.reflect.Reflect");
Object obj = cls.newInstance();
//call the testMethod method
Method method = cls.getDeclaredMethod("testMethod", noparams);
method.invoke(obj, null);
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
再次link再看一下我自己举例的教程。
如果你必须动态加载jar(如果它在编译时没有添加到类路径中),你可以这样做:
// Getting the jar URL which contains target class
URL[] classLoaderUrls = new URL[]{new URL("file:///home/ashraf/Desktop/simple-bean-1.0.jar")};
URLClassLoader child = new URLClassLoader (classLoaderUrls, this.getClass().getClassLoader());
Class classToLoad = Class.forName ("com.MyClass", true, child);
Method method = classToLoad.getDeclaredMethod ("myMethod");
Object instance = classToLoad.newInstance ();
Object result = method.invoke (instance);