为方法参数分配新值是否有问题?

2022-09-02 03:05:19

Eclipse 有一个选项可以在分配到方法的参数(在方法内部)时发出警告,如下所示:

public void doFoo(int a){
   if (a<0){
      a=0; // this will generate a warning
   }
   // do stuff
}

通常,我会尝试激活(并注意)几乎所有可用的编译器警告,但在这种情况下,我不太确定这是否值得。

我看到在方法中更改参数的合法情况(例如:允许参数“未设置”(例如null)并自动替换默认值),但很少有会导致问题的情况,除了在方法中间重新分配参数可能有点混乱。

您是否使用此类警告?为什么/为什么不呢?

注意:

避免此警告当然等同于制作方法参数(只有这样它才是编译器错误:-))。因此,为什么我应该在Java中的方法参数上使用关键字“final”这个问题可能是相关的。final


答案 1

令人困惑的部分是警告的原因。如果在方法中为参数重新分配新值(可能是条件值),则不清楚什么是 a。这就是为什么它被认为是好的风格,保持方法参数不变。


答案 2

对我来说,只要你早点清楚,就没问题。正如你所说,在四个条件中深埋在30行函数中,这样做并不理想。

在使用对象引用执行此操作时,显然还必须小心,因为在给定的对象上调用方法可能会更改其状态并将信息传回调用方,但是当然,如果您在自己的占位符中进行了子设置,则不会传达该信息。

另一方面,声明一个新变量并为其分配参数(或者如果参数需要默认值,则分配默认值)可能会更清晰,并且几乎肯定不会降低效率 - 任何像样的编译器(无论是主编译器还是JIT)都会在可行的情况下对其进行优化。


推荐