2014-11-04 56 views
0

我正在为我的学生代码写一个自动分级程序。每个学生班都被命名为相同的东西(选择)。他们都在同一个文件夹中。我想弄清楚如何重置对象,以便在创建新对象时实际使用新对象。Java中的反射:如何创建具有相同名称的不同类型的对象?

事情我已经尝试:

  • 删除原来的.class文件,并重新编译
  • 写另一个类,我每次(testFile1.java编译并调用testFile2.java,这实际上创建时间编译每个选择对象)。

问题似乎是Java缓存Selection类对象,所以每次运行它时,它都会使用第一个Selection类,而不是新编译的类。

我的问题是:如何重置java来摆脱java中的类的缓存,以便当我编译具有相同名称的另一个文件时,它实际上会使用新的对象类型?

+2

“选择课是一个我想弄清楚如何......”有没有一些话掉在你的问题和地板上? – ajb 2014-11-04 17:27:44

+0

我不完全确定你的问题是什么。当你编译一个类时,它不会被更新?为什么每个学生都有一堂课,而且他们都被命名为同一件事?我很困惑 – 2014-11-04 17:30:25

+0

这个问题最好用脚本解决 - 让你的脚本创建一个临时文件夹,复制你的驱动程序和学生的提交,然后执行它。由于新程序员特别容易出现奇怪的事情,因此您不希望其中一人偶然(或恶意)通过更改System.out来影响下一个学生的结果。 – Gus 2014-11-04 17:42:17

回答

2

我建议你把它们放在不同的文件夹中,或者如果你一次只处理一个文件夹,就把它们放到一个临时文件夹中。

如果您想在不重新启动JVM的情况下加载新版本的类,则必须将类放入不同的ClassLoader中。

但是,如果有一个学生做了一件好事,他们可以阻止其他学生的代码运行。避免这种情况的最好方法是在其自己的JVM中运行每个替换以避免污染。

例如,我可以将(Integer) 0更改为等于(Integer) 1或更改“Hello”以打印“G'Day”,想象一下您可以执行的操作。 ;)

相关问题