防止或防止反思

时间:2014-04-09 14:12:34

标签: java reflection

我疯狂地试图在Code Golf Stack Exchange上运行programming competition。我写了一个小控制程序,让动物在游戏板上互相攻击。动物大多是Java类(CrazyWolf.java,SuicideWolf.java等),由其他人编写。

那些家伙在比赛中发现了很多漏洞,这会让你头晕目眩。他们中的一些人开始编写使用反射的狼队,在模拟开始之前就会削弱竞争对手。

我从两个角度来看这个。

  • 我可以保护同一个包中的类不受反射影响吗?
  • 竞争对手本身可以保护自己的狼免受反射吗?

关于第一个问题,我在Stack Overflow上找到的最接近的答案是this one,它解决了限制访问其他包的问题。所有狼都从同一个Animal类继承,因此必须可以访问该类。

关于第二个问题,我一无所获。似乎反思只是践踏了我认为私有甚至最终变量的所有内容。我确实设法找到一篇关于欺骗编译器用一个不受反射影响的常量替换静态最终变量的文章,但它似乎不可靠并且要求字段是静态的和最终的。

我可以使用哪些方法来解决这个问题?我使用的是Java 8和NetBeans 7.4。

1 个答案:

答案 0 :(得分:1)

最简单的方法是在受保护的沙盒模式下运行,让安全管理器完全关闭反射。

这里的一些答案可能有所帮助:

Disable Java reflection for the current thread