gpt4 book ai didi

java - File.getClass().getMethod() : how to get . 类和方法

转载 作者:行者123 更新时间:2023-12-01 15:14:48 25 4
gpt4 key购买 nike

我正在使用 JUnit4,我正在尝试设置一个可用于多个相同类的测试(为什么它们都是相同的并不重要),但我将多个 java 文件传递​​给测试,并从中我我正在尝试创建在方法 eg 中同时具有 .class 和方法名称的对象。 list.add(new Object[]{testClass.class, testClass.class.methodName()}); 如果您完全按照原样输入 .class 的名称和方法的名称(如在上面的示例中),但由于我想对许多不同的类执行此操作,我需要将它们传递到循环中,并且我使用以下代码 list.add(new Object[]{currentFile.getClass( ), currentFile.getClass().getMethod(addTwoNumbers,int, int)} 其中 currentFile 是当前正在处理的文件,.getMethod(addTwoNumbers,int, int) addTwoNumbers 是需要两个整数的方法的名称例如 addTwoNumbers(int one, int Two) 但我收到以下错误

'.class' expected

'.class' expected

unexpected type
required: value
found: class

unexpected type
required: value
found: class

这是我的完整代码

CompilerForm compilerForm = new CompilerForm();
RetrieveFiles retrieveFiles = new RetrieveFiles();

@RunWith(Parameterized.class)
public class BehaviorTest {

@Parameters
public Collection<Object[]> classesAndMethods() throws NoSuchMethodException {


List<Object[]> list = new ArrayList<>();
List<File> files = new ArrayList<>();
final File folder = new File(compilerForm.getPathOfFileFromNode());
files = retrieveFiles.listFilesForFolder(folder);
for(File currentFile: files){
list.add(new Object[]{currentFile.getClass(), currentFile.getClass().getMethod(addTwoNumbers,int, int)});
}

return list;
}
private Class clazz;
private Method method;

public BehaviorTest(Class clazz, Method method) {
this.clazz = clazz;
this.method = method;
}

有人看出我在这行做错了什么 list.add(new Object[]{currentFile.getClass(), currentFile.getClass().getMethod(addTwoNumbers,int, int)});
}

最佳答案

我相信您需要首先使用类加载器加载文件,然后创建它,以便您可以在类上使用反射。这是一篇类似的帖子,其答案包含更多相关信息。 How to load an arbitrary java .class file from the filesystem and reflect on it?

以下是有关此内容的更多信息:

A Look At The Java Class Loader

Dynamic Class Loading and Reloading in Java

这是一个使用 URLClassLoader 的简单示例

// 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) {
}

示例取自:

Loading a Class That Is Not on the Classpath

关于java - File.getClass().getMethod() : how to get . 类和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11781095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com