重用类级别变量或创建新的局部变量?

时间:2016-06-08 15:12:09

标签: local-variables class-variables

我已经多次看到这个问题,但是以不同的方式,答案从来都不是我一直在寻找的。我确信我可以做一些测试,但我觉得这对其他人来说可能是一个很好的资源,也许对此事有一些看法。

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

如果一遍又一遍地调用这些方法,那么创建临时类级变量会更有效吗?每次调用方法时都会覆盖这些变量,或者每次都创建一个新变量?

特别是在循环中。我通常会尝试将所有变量保持在本地,但是我最近使用的程序员做了相反的操作并更改了我的一些代码,因为如果我需要进行修改,将来可能会更容易更改。

如果这令人困惑,这就是我的意思的一个例子:

// 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,似乎只是谈论在单个方法中重用变量。或者将变量重用于不同的值或值类型。如果值的值与第一个值不同,则应该获得自己的名称。除非所述变量的命名是通用的并且可以用于不同的事物。整数'i'可能不是最好的重用,因为它很常见,可以在其他可能导致冲突的地方使用。只要您投入其中的价值相关且兼容,就可以重复使用“得分”之类的东西。

1 个答案:

答案 0 :(得分:0)

我将对前面提到的问题的一些答案进行略微重述。为了可维护性,请使用局部变量。

如果您使用本地变量,那么任何编辑或调试此代码的人(包括您自己,几个月后)都会立即知道代码 getChar()方法中,可以更改tempObject的值。知道这是一件有用的事情。

另一方面,如果将其定义为实例变量,则事情要复杂得多。假设您正在考虑将getChar方法调用为不同的实例方法(让我们称之为foo)。然后,突然之间,您必须花时间确定foo是否依赖{em>更改,tempObject的值。以及foo 调用的任何方法是否会改变它。等等...

还有许多其他类似问题可能出现。我甚至没有涉及线程问题。

使用本地变量可以让以后读取代码的任何人完全清楚完全正在发生什么 - 这里只使用了 。如果你把它变成一个实例变量,每个人都必须停下来思考它。