MAIN方法应该复制输入参数吗?

时间:2014-09-23 17:52:16

标签: java

有人可以想象这段代码:

public static void main(final String[] args) {
   // do something
}

应该成为这个:

public static void main(final String[] args) {
   String[] argsCopy = doCopy(args);
   // do something
}

(在我们公司,我们有一个声纳规则,强制所有方法的应对或参数。)我可以想象为什么它对标准方法很重要,但我找不到在工具开始时完成它的任何好处主要方法。我错过了什么吗?

2 个答案:

答案 0 :(得分:6)

复制数组参数的原因是为了避免在验证其元素后修改数组的可能性。这是一种非常好的防御技术,可以保护您免受来电者的恶意呼叫。

但是,在这种情况下,调用者是JVM本身。如果您不相信JVM没有恶意代码,那么您遇到的问题比通过复制数组可以解决的问题要大得多。

唯一的例外是当您将args传递给某些功能时。在这种情况下,如果某些方法决定更改args的内容,则制作副本是一个非常好的主意。这是我建议制作副本的唯一情况。如果main是唯一使用args的地方,则无需复制。

答案 1 :(得分:2)

我可以想象一下,对我来说最明显的两个是:

  • 如果您修改它们但仍需要参考原始值
  • 如果您使用main作为“普通”方法,例如,不只是从命令行调用

一般而言,在这种情况下,它并不是非常有用。