java - 防止或防止反射

标签 java reflection

我正在疯狂地尝试运行 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 沙箱模式下运行,并让安全管理器完全关闭反射。

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

Disable Java reflection for the current thread

关于java - 防止或防止反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22965293/

相关文章:

java - 遍历堆栈时显示传递的参数值

c# - 从数据表或数据库表生成类

java - 未连接到公司VPN时从Maven存储库下载 Artifact

java - JPanel 不显示背景图像

java - Spring mvc jdbc 和 hibernate

c# - 带有 GetFields 和 GetProperties 的 DumpObject,例如带有嵌套类

java - 如果只有完全限定名称,如何获取 java 类的二进制名称?

java - 是否有一些更好的方法可以在您使用相当小的数据集输入 Java 时实现查找?

java - 在java中将本地时区转换为GMT

java - 如何用 Java 1.8 函数替换反射方法访问?