有人可以想象这段代码:
public static void main(final String[] args) {
// do something
}
应该成为这个:
public static void main(final String[] args) {
String[] argsCopy = doCopy(args);
// do something
}
(在我们公司,我们有一个声纳规则,强制所有方法的应对或参数。)我可以想象为什么它对标准方法很重要,但我找不到在工具开始时完成它的任何好处主要方法。我错过了什么吗?
答案 0 :(得分:6)
复制数组参数的原因是为了避免在验证其元素后修改数组的可能性。这是一种非常好的防御技术,可以保护您免受来电者的恶意呼叫。
但是,在这种情况下,调用者是JVM本身。如果您不相信JVM没有恶意代码,那么您遇到的问题比通过复制数组可以解决的问题要大得多。
唯一的例外是当您将args
传递给某些功能时。在这种情况下,如果某些方法决定更改args
的内容,则制作副本是一个非常好的主意。这是我建议制作副本的唯一情况。如果main
是唯一使用args
的地方,则无需复制。
答案 1 :(得分:2)
我可以想象一下,对我来说最明显的两个是:
main
作为“普通”方法,例如,不只是从命令行调用一般而言,在这种情况下,它并不是非常有用。