2016-06-08 89 views
-1

我见过这个问题很多次,但以不同的方式,答案从来没有我一直在寻找。我确信我可以做一些测试,但我觉得这可能是一个很好的资源给其他人,也许会在这件事上得到一些意见。重复使用类别变量或创建新的局部变量?


这是问题:我有一个实现配置接口的类。每个继承的方法通常都有一个变量。最常见的是通用的对象

如果反复调用这些方法,创建每次调用方法时都会覆盖的临时类级变量,还是每次创建一个新变量会更有效?

尤其是在循环过程中。我通常尽量将所有变量保留在本地,但最近我正在使用的程序员做了相反的事情,并更改了我的一些代码,因为如果我需要进行修改,将来可能会更容易对其进行更改。


如果这是混乱的,这里是我的意思的例子:

// Reused Local Variable 
private Object tempObject; 

public char getChar(String key) { 
    tempObject = get(key); /* method that grabs and object from a map */ 

    // more code... 
} 


// Recreated Local Variable 
public char getChar(String key) { 
    Object tempObject = get(key); 

    // more code... 
} 

请不要将此标记为重复的问题。这个问题有很多,但它们都有不同的答案,这些答案大不相同。

我做了我的研究,所以不要说我没有。 (在这个网站上似乎是一个巨大的问题,你不能再得到任何帮助,因为人们如此快速地标记帖子,甚至没有阅读它们,因为它们与其他帖子相似)。

这些答案:here,陈述如果你想重新格式化你的代码,你会无缘无故地为自己做更多的工作。而这取决于编译器,它可能会自动将代码重构为最佳用法。但是如果有多个用户在不同的编译器上编译代码,则一个构建可能更多。

这些答案:here,似乎谈论只是在一个单一的方法重用一个变量。或者将变量重用于不同的值或类型的值。如果该值做了与第一个值不同的值,它应该有自己的名字。除非所述变量的命名是通用的并且可以用于不同的事物。 Integer'i'可能不是最好的重用,因为它很常见,可以在其他可能导致冲突的地方使用。只要您投入的价值是相关且兼容的,就可以重用“分数”之类的内容。

+0

有趣的是,人们不想帮忙,甚至不想提出任何建议。相反,他们只是投票选题和/或报告。这个网站真棒。爱这里所有有帮助的人。 –

回答

0

我打算稍微重申一些前面提到的问题的答案。为了可维护性,请使用局部变量。

如果使用本地变量,那么任何人编辑或调试代码(包括你自己,从现在几个月)会立即知道只有代码getChar()方法可以改变的tempObject值。这是一个有用的事情要知道。

另一方面,如果将其定义为实例变量,则情况会复杂得多。假设您正在考虑将getChar方法调用为另一种实例方法(我们称之为foo)。然后,突然之间,您必须花时间计算foo依赖于还是,值为tempObject。并且foo调用是否有任何方法更改它。等等......

还有很多其他类似的问题可能出现。而且我甚至没有遇到线程问题。

使用局部变量非常明确的人谁读在未来的代码完全这是怎么回事 - 这是只有在这里使用。如果你把它变成一个实例变量,每个人都必须停下来思考它。