Java构造函数和简单setter中参数命名的最佳实践

Uri*_*Uri 41 java naming

对于简单的构造函数和setter ,Java中的参数是否有标准的可接受约定?

(我已经看到了C++的答案,但两个社区的实践经常不同)

假设我有一个带有foo字段的C类.

我经常看到以下三个选项:

1)使用带有下划线的实际字段名称:

public C(Type foo_)
{
   foo = foo_;
}

public void setFoo(Type foo_)
{
   foo = foo_;
}
Run Code Online (Sandbox Code Playgroud)

2)使用实际的字段名称,只需在设置中使用"this":

public C(Type foo)
{
   this.foo = foo;
}
public void setFoo(Type foo)
{
   this.foo = foo;
}
Run Code Online (Sandbox Code Playgroud)

3)完全不一致的事情,如:

public C(Type bar)
{
   this.foo = bar;
}
public void setFoo(Type bar)
{
   this.foo = bar;
}
Run Code Online (Sandbox Code Playgroud)

我倾向于使用2,但我想知道什么是正确的做法.

Nat*_*Nat 51

方案二是最常见的.在Java中,使用无意义的名称前缀或后缀来区分实例变量和局部变量的参数被认为是不好的做法.但名称本身没有惯例.使用任何名称使代码最容易理解.


coo*_*ird 20

我也看到选项2是最常见的选项:

int importance;

public int getImportance()
{
    return importance;
}

public void setFoo(int importance)
{
    this.importance = importance;
}
Run Code Online (Sandbox Code Playgroud)

Eclipse和Netbeans等IDE将自动以上述格式编写getter和setter.

使用此方法有一些优点:

不在_字段名称中使用下划线()字符 - 不建议将非下划线用于非常量字段名称.

除了常量的标识符之外,不建议在标识符中使用下划线字符.

The Java Tutorials 的Variables页面提到了关于下划线的以下内容:

如果您的变量存储一个常量值,例如static final int NUM_GEARS = 6,约定会略有变化,将每个字母大写并用后突字符分隔后续单词.按照惯例,下划线字符从未在别处使用过.

(重点补充.)

由于字段名称不是常量,根据该页面上的内容,不应在非常量字段中使用下划线.

IDE可以根据方法参数的名称自动添加Javadoc注释,因此在参数列表中使用该字段的名称将是有益的.

以下是自动生成的Javadoc的示例:

/**
 *
 * @param importance  <-- Parameter name in Javadoc matches
 *                        the parameter name in the code.
 */
public void setImportance(int importance)
{
    this.importance = importance;
}
Run Code Online (Sandbox Code Playgroud)

让Javadoc反映字段的名称还有另一个好处 - 具有代码完成功能的IDE可以使用Javadoc中的字段名称来自动填写参数名称:

// Code completion gives the following:
this.getImportance(importance);
Run Code Online (Sandbox Code Playgroud)

赋予字段名称和参数名称含义将使您更容易理解参数实际表示的内容.

这些是我目前可以提出的一些优点,我相信它很可能是在Java中命名参数的最常用方法.


cle*_*tus 9

(1)非常C/C++.Java并不倾向于使用前导下划线.

我个人使用(2)几乎完全.

(3)只是让你的生活变得困难,因为很难想到成员和参数的两个有意义但简洁的名字.