为什么Java使用this.member的约定?

Rus*_*nes 4 java coding-style naming-conventions

我经常看到java代码中使用的以下命名约定.

class SomeClass {
    private final String name;

    public SomeClass(final String name) {
        this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说有点奇怪.首先,如果你碰巧拼错方法签名中的变量,它仍然会编译...

class SomeClass {
    private final String name;

    public SomeClass(final String nane) {
        this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译好.可能将nane标记为未使用的变量,但是赋值(它只是一个自我赋值)会静默编译.

我发现自己想要使用'm'作为成员变量......

class SomeClass {
    private final String mName;

    public SomeClass(final String name) {
        mName = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

它比.this变体短,并且捕获了之前显示的奇怪的拼写错误.

然而,当我把这个作为我们新项目的惯例提出来时,我的同事给了我各种各样的瑕疵,说"在java中我们不这样做.".

只是好奇为什么?

Jon*_*eet 15

我个人不喜欢使用前缀 - 它使代码更难阅读,IMO.我相信不同的人会以不同的方式阅读 - 我最终会"大声朗读"并且前缀会中断此过程.显然你可以习惯它,但我宁愿不必这样做.

但是,声称没有人使用这样的前缀是错误的.我曾在各种使用Java的公司工作过 - 有些使用过前缀,有些则没有.

我还要指出,大多数IDE会在你的错字示例中给出关于无操作分配的警告.例如,在Eclipse中我得到:

The assignment to variable name has no effect
Run Code Online (Sandbox Code Playgroud)

如果你经常忽略警告,我会说你有更大的问题:)

  • 我经常遇到很容易解决的错误,只需关注IDE告诉我的内容即可. (3认同)

bak*_*kal 9

我宁愿this只在需要消除歧义的少数地方使用,而不是在代码中随处可见前缀.


Mic*_*rdt 5

对成员变量使用特定前缀是一种匈牙利表示法 - 技术性的,坏的种类.信息(什么是成员变量和不是成员变量)已经在代码中,不需要复制它.

正如您所指出的,一个好的IDE会警告您未使用的变量(并且可能允许您将该警告转换为错误).语法高亮还将区分本地变量和成员变量.为什么想出一个丑陋的代码约定来做IDE的工作,使一个非常特定的程序员错误的可能性降低?