如何加载外部java类并使用参数调用方法
我试图加载一个具有特定url的类,并通过向它们传递相同的值来调用该类中的方法
我不知道该怎么做
我的url看起来像这样:“文件:/C:/Users/Retro/Desktop/best-project-2/mutants/traditional\u mutants/Complex\u cconvolve(Complex,Complex)/AOIS\u 136/FFT.class”
我试着像这样加载类
package com.company.fileIterator;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.List;
public class CallMutant {
public static void main(String[] args) throws IOException {
FolderIterator folderTestRunner = new FolderIterator();
List<String> list = folderTestRunner.getFilesPath();
URL url;
try{
url = new URL("file:///"+list.get(5));
System.out.println(url);
URLClassLoader ucl = new URLClassLoader(new URL[]{url});
Class clazz = ucl.loadClass("FFT");
Object o = clazz.newInstance();
System.out.println(o.toString());
} catch (MalformedURLException e){
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
主要目标是加载具有相同名称和方法的多个类
谢谢你的帮助
# 1 楼答案
FTT。类,我也有相同的文件,只是扩展名为java
呼叫变种人。java//
完整链接
名单。get(5)=C:\Users\Retro\Desktop\best-project-2\mutants\traditional\u mutants\Complex\u cconvolve(Complex,Complex)\AOIS\u 136\FFT。班 包裹通讯。公司文件迭代器
# 2 楼答案
好的,所以我最后做的是反射。我创建了一个临时文件,复制了原始FFT类的所有代码,将类名更改为与文件名相同,最后编译了新文件并调用了必要的方法
成功了
# 3 楼答案
我不明白你的意思。为什么不编译这个类文件的jar文件,并将其作为依赖项包含在项目中(比如see here)?在这种情况下使用类加载器和反射既慢又不安全