当前位置: 首页 > 面试题库 >

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

鄢飞鸾
2023-03-14
问题内容

Eclipse有一个选项,用于警告分配给方法的参数(在方法内部),如下所示:

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

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

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

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

注意:

避免此警告当然等同于设置方法参数final(仅当它是编译器错误时:-)。那么这个问题为什么我应该在Java的方法参数上使用关键字“final”?可能相关。


问题答案:

对我来说,只要您尽早清楚地做到这一点,就可以了。正如您所说,将其深埋在30条线函数的四个条件中很不理想。

显然,在使用对象引用执行此操作时也必须要小心,因为在给定的对象上调用方法可能会更改其状态并将信息传达回调用方,但是,如果您已将其放在自己的占位符中,则该信息必定会发生变化。没有沟通。

不利的一面是,声明一个新变量并为其分配参数(或默认值,如果参数需要默认值)可能会更清楚,并且几乎肯定不会降低效率-
任何体面的编译器(无论是主编译器还是JIT) )将在可行时对其进行优化。



 类似资料:
  • 问题内容: 我以前从未做过,也找不到答案。这可能不是用于此目的的正确数据类型,但是我只想分配一个int,然后将另一个没有in循环的int分配到2D数组中,值实际上是从另一个函数返回的,但是为了简单起见,只是使用in i和k,这就是我以为您会这样做的方式,但事实并非如此: TIA-如果我误选了错误的树,请随时向我指出一个更好的数据结构的方向。 问题答案: 最好的方法可能是一次声明并分配所有值。如图所

  • 问题内容: 浏览Java API源代码时,我经常看到方法参数已重新分配给局部变量。为什么要这样做? 这在java.util.HashMap中 问题答案: 这是线程安全性/更好性能的规则。在易失。如果将变量分配给局部变量,它将变为局部堆栈变量,该变量自动是线程安全的。而且,修改局部堆栈变量不会强制“先发生”,因此在使用它时不会产生同步损失(与之不同的是,每次读/写操作都会导致易失性,这会花费您获取/

  • 问题内容: 我想在一个类中构建一个方法,并从该类中获取默认值参数。通常,我会对某些数据进行过滤。在我的班级内部,我有一个方法,通常我会传递数据向量。有时我没有矢量,而是获取了模拟数据。每次我不传递特定向量时,我都希望默认情况下获取模拟数据。我认为在我说的方法定义中应该很容易构造。但是由于某种原因,我有一个错误。简化的结构是: 我期望的输出应该是: 我尝试了默认分配,因为它显然无法正常工作。据我了解

  • 我试图在kotlin中编写一个函数,但我无法将值重新分配给函数参数,它说val不能重新分配。 当我试图分配一个值url=主页. it给我错误val不能重新分配,我是新的kotlin,我不明白是什么问题,很少帮助将不胜感激。

  • 我有办法 我想知道如果它真的创建了用户,我是否可以对其进行单元测试。但是它没有参数。 我尝试了以下方法: 然而,这实际上让我通过了与扫描仪的争论,这显然是我在测试中无法做到的。还尝试了其他逻辑。我也尝试过使用when(),,,但我找不到解决这个问题的方法,因为我对模仿还比较陌生。 有人能和我分享一些想法吗?

  • 我有一个问题,归结为试图将具有特定参数类型的函数分配给期望具有泛型类型的函数的变量: 游乐场版。 TypeScript给出以下错误: 类型“(v:string[]))= 这个错误对我来说没有多大意义,因为对于泛型,似乎是一个非常合理的类型。 有一个相关的问题具有相同的基本问题,但是答案是特定于该问题的情况的:为什么实现接口的TypeScript类不能分配给扩展接口的通用约束?