有没有办法动态创建一个包含类代码的字符串的类,或者可能以同样的方式向以前创建的现有类添加方法?
用例场景:学生正在进行考试,他必须在没有IDE的情况下编写一些方法(因此他提交了一个简单的字符串)。我想要实现的是一种在他的提交上执行简单单元测试的方法。例如,一个可点击的按钮,用于运行由教授提供的单元测试。
抱歉我的英文不好,并提前致谢!
答案 0 :(得分:0)
KIT(德国卡尔斯鲁厄的一所大学)创建了一个测试学生编程任务的工具。你看看它here
答案 1 :(得分:0)
学生将提交Java源代码,而不是字节代码。 Java源代码必须使用Java编译器编译为字节代码,然后才能由类加载器加载。您可以通过以编程方式调用编译器来完成此操作(请参阅this answer)。在运行时加载这个新.class
文件的字节代码可以这样做:
class NetworkClassLoader extends ClassLoader {
String host;
int port;
public Class findClass(String name) {
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
}
private byte[] loadClassData(String name) {
// load the class data from the connection
. . .
}
}
(来自here的例子,谢谢@Robert)。
有了实例后,您可以将其提供给测试应用程序以运行某些测试并获得结果。
最简单的方法是让提交的类实现您定义的接口,并让测试代码针对该接口进行测试。通过这种方式,您的测试将预先编译,并仍然可以处理动态编译的&在运行时实例化提交。