Java中的反思:如何使用相同的名称创建不同类型的对象?

时间:2014-11-04 17:23:17

标签: java caching reflection

我正在为学生代码编写自动分级器。每个学生班级都被命名为相同的东西(选择)。它们都在同一个文件夹中。我试图弄清楚如何重置对象,以便在创建新对象时,它实际上使用了新对象。

我尝试过的事情:

  • 删除原始.class文件,然后重新编译
  • 编写我每次编译的另一个类(testFile1.java编译并调用testFile2.java,实际创建每个Selection对象)。

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

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

1 个答案:

答案 0 :(得分:2)

我建议您将它们放在不同的文件夹中,或者放在临时文件夹中,如果您一次处理它们。

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

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

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