我正在疯狂地尝试运行 programming competition在 Code Golf Stack Exchange 上。我编写了一个小型控制程序,让动物在游戏板上相互对抗。这些动物大多是其他人编写的 Java 类(CrazyWolf.java、SuicideWolf.java 等)。
那些家伙在比赛中发现了如此多的漏洞,这会让你头晕目眩。他们中的一些人开始编写 Wolves,在模拟开始之前就使用反射来削弱竞争。
我从两个角度来看这个问题。
- 我可以保护同一包中的类免受反射吗?
- 参赛者自己能否保护自己的狼免受反射(reflection)?
关于第一个问题,我在 Stack Overflow 上能找到的最接近的答案是 this one ,它解决了对其他包的访问限制。所有狼都继承自同一个 Animal
类,因此该类必须是可访问的。
关于第二个问题,我没有找到任何信息。看起来反射只是践踏了我认为我知道的关于私有(private)变量甚至最终变量的一切。我确实找到了一篇关于欺骗编译器用不受反射影响的常量替换静态最终变量的文章,但它似乎不可靠,并且要求字段是静态和最终的。
我可以用什么方法来解决这个问题?我使用的是 Java 8 和 NetBeans 7.4。
最佳答案
最简单的方法是在 protected 沙箱模式下运行,并让安全管理器完全关闭反射。
这里的一些答案可能会有所帮助:
关于java - 防止或防止反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22965293/