如何避免本地声明隐藏更高级别的声明

时间:2012-08-14 12:31:51

标签: java scope naming-conventions

我正在阅读Java Code Conventions PDF,我注意到了这一点:

  

避免在较高级别隐藏声明的本地声明。对于   例如,不要在内部块中声明相同的变量名称:

int count;
         ...
         func() {
             if (condition) {
                 int count;
... }
... }

这不是什么新鲜事,我经常发现自己编写这样的代码。你是如何解决这种情况的?当然你可以说“找一个更好的名字”,但这并不总是那么容易。是否有任何关于在更高级别名称的前面或后面添加内容的约定?

5 个答案:

答案 0 :(得分:2)

您可以使用特定于范围的变量命名约定来减少混淆。

String[] names;

public void populateNames(String[] theNames) {
    names = theNames;
}

此外,您可以使用this关键字明确说明所需的范围变量。

int count = 0;
public void func() {
    int count = 0;
    if (condition) {
        this.count++; // increment the class-scope count variable
    } else {
        count++; // increment the local scope variable
    }
}

通常,只是不重用您的变量名称。它会使那些读取代码的人感到困惑,并使调试变得更加困难。

答案 1 :(得分:0)

int count;
count = 1;

不同
int count;
this.count = 1;

因此,如果您使用局部变量,则不要使用“this”。

答案 2 :(得分:0)

顶级变量具有较低的“详细”名称。例如:

class A{

    private int mVegetablesCount;

    public void foo(){
        int count;
        if(true){
           int cnt;
             if(true)
                int c;
        }
    }
}

就像变种一样。此外,最好特定地命名您的类字段。在我的示例字段中,名为fith前缀“m”。

答案 3 :(得分:0)

如果您只处理方法变量声明,则可以使用this关键字来引用实例变量,如以下示例所示:

public class Foo {
    private int id;

    public void setId(int id) {
        this.id = id;
    }
}

此处,this.id表示实例变量,而id表示传入setter的参数。

我知道你说你不想听到使用更好的变量名的建议,但我认为你应该真正拥有重复名字的唯一情况是当你准备为ivar设置新值时,或刚刚读过伊娃。即便如此,使用具有更多含义的名称通常更具可读性,因此,例如,如果您只需要一个与barr暂时相同的变量,请将其命名为tmpBarr或类似名称。

答案 4 :(得分:0)

我在库中看到过这种编码风格:

  • 成员变量:_variable
  • 本地变量:locVariable
  • 方法参数(参数):parVariable

但我个人认为这会使代码变得混乱。

任何好的IDE都会使用颜色代码,使局部变量和类成员之间有明显区别。