如何使用两个参数动态加载Java中的类,这两个参数是类文件的绝对文件路径和我想调用的方法的名称?
例如path:c:\ foo.class 方法:print()
我只是对作为简单的cmd线工具的基础知识感兴趣。一个代码示例将不胜感激。
欢呼声恶作剧答案 0 :(得分:5)
使用URLClassLoader
。方法的名称无关紧要。您必须将程序包的根目录传递给类加载器。然后,您可以使用Class.forName()
中的完全限定类名(包+类名)来获取Class
实例。您可以使用普通反射调用来创建此类的实例并在其上调用方法。
为了让您的生活更简单,请查看commons-beanutils。它使调用方法更加简单。
答案 1 :(得分:2)
结帐this example:
// Create a File object on the root of the directory containing the class file
File file = new File("c:\\myclasses\\");
try {
// Convert File to a URL
URL url = file.toURL(); // file:/c:/myclasses/
URL[] urls = new URL[]{url};
// Create a new class loader with the directory
ClassLoader cl = new URLClassLoader(urls);
// Load in the class; MyClass.class should be located in
// the directory file:/c:/myclasses/com/mycompany
Class cls = cl.loadClass("com.mycompany.MyClass");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
}
在此之后,你可以做这样的事情来首先使用默认构造函数创建一个新的instace并调用不带参数的方法“print”:
Object object = cls.newInstance();
cls.getMethod("print").invoke(object);