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

标签 java

有人能想象这段代码:

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

应该变成这样:

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

(在我们公司,我们有一个 Sonar 规则,强制对所有方法进行这种处理或论证。)我可以想象为什么它对标准方法很重要,但我找不到在工具启动时完成它的任何好处主要方法。我错过了什么吗?

最佳答案

复制数组参数的原因是为了避免在验证数组元素后有人修改数组的可能性。这是一个很好的防御技术,可以保护你免受调用者的恶意调用。

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

唯一的异常(exception)是当您将 args 传递给您的某些函数时。在这种情况下,制作副本是个好主意,以防某些方法决定更改 args 的内容。这是我建议制作副本的唯一情况。如果 main 是唯一使用 args 的地方,则不需要复制。

关于java - MAIN 方法应该复制输入参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26001580/

相关文章:

java - Jackson - 使用动态 key 反序列化 json

java - 如何使用 Java 序列化和反序列化来自 Google geocode 的 JSON 对象

java - 实体设计JPA

java - 如何访问函数中的外部变量?

java - 将方法调用与静态方法一起使用?

java - 如何重命名Kafka主题

java - 如何在时间序列图表上显示数据库中存储的时间

java - 用整数/BigInteger 与 BigDecimal 表示金钱

java - 当抛出应用程序异常时,Hibernate saveAndFlush 不会持久化

Java Final——一个永恒的谜