【发布时间】:2012-08-25 10:45:07
【问题描述】:
假设两种不同的方法——一种是静态的,一种是非静态的——需要一个实例变量。
该变量在方法中被使用了 3-5 次以进行比较。
变量不会以任何方式改变。
变量的类型(字符串、集合、集合等)也会对其编码方式产生任何影响。
在私有方法(静态和非静态)中使用实例变量的最佳/正确方法是什么?
- 作为方法参数传递
- 本地存储,使用获取值的方法——this.getClaimPropertyVertices();
- 通过获取值本地存储 - this.claimPropertyVertices;
- 直接在方法中使用实例变量
当创建一个局部变量来存储值时,如果变量不会被改变,“final”关键字将提供任何优势。
编辑 1:根据评论,我正在添加其他信息 该值不能在方法中本地创建。它必须来自类或类访问的其他方法。
我基于答案的解决方案:
基于@EricJ 的回答。和@Jodrell。我选择了选项 1,并将其创建为私有静态方法。我还找到了一些细节here 来支持这一点。
【问题讨论】:
-
静态方法不能访问实例字段,句号。
-
这真的取决于使用变量的方法的上下文。传入值是否有意义,或者可以在本地创建?在不了解这些方法的上下文的情况下,很难回答这些问题。另外...这闻起来像早期的微优化...eeeeeviiiiillllll。而且静态方法只能访问静态变量。
-
@MattBall 谢谢。我从来没有这样做过,但想把它说出来,以便我可以学习/理解是否会有差异
-
@JasonDown 无法在本地创建值。我的目标不是优化,而只是尝试了解在这种情况下是否存在最佳/标准实践。
-
答案是 1。静态方法不能访问实例成员,除非它们通过引用传递,这表明代码有异味。选项 1 将允许您稍后使用多线程(痛苦更少)并提供与生俱来的关注点。
标签: c# java methods instance-variables