Getters and Setters - 适当的约定

时间:2013-05-27 12:30:37

标签: java

我被告知以下代码不遵循正确的getter和setter约定。我很难知道为什么或在哪里。我正在使用构造函数将新的团队名称传递给set方法。我是Java的初学者,但我认为getter和setter方法似乎都很好。我错了吗?感谢。

public class Team {

  private String teamName;

  public Team(String newName) {
    setName(newName);
  }

  public String getName() {
    return teamName;
  }

  public void setName(String newName) {
    teamName = newName;
  }

  public String toString() {
    return teamName;
  }

  public boolean equals(Team t){
    if(t.getName().equals(teamName)){
        return true;
    } else{
        return false;
    }       
  }

}

5 个答案:

答案 0 :(得分:7)

如果变量名称为X,则getter / setter为getX/setX

任何好的IDE,比如IntelliJ,都会为你生成这些。

它也会正确地为你生成等号,你没有,并给你一个hashCode。你总是需要将这两者结合起来。阅读约书亚布洛赫的“有效Java”chapter 3,看看他们的情况如何。

答案 1 :(得分:4)

应该是getTeamNamesetTeamName。通常,如果您的媒体资源名为foo,则getter和setter分别为getFoosetFoo

当然,您也可以将属性名称从teamName重构为name,因为您的类已经按照评论中的建议调用Team

答案 2 :(得分:1)

按照以下链接命名约定

http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138795.html

此外,PDF Specification

第8.8节“推断名称的大写”以及属性的名称应如何。

答案 3 :(得分:0)

getter和setter应该引用属性名称。

在这种情况下,正确的约定必须是getTeamNamesetTeamName

答案 4 :(得分:0)

对于名为teamName的变量,您的setter称为setTeamName

也不要在构造函数中使用setter和getter方法,因为可以通过扩展类来覆盖setter。通过这种方式,您可以通过仅更改setter而不是构造函数来更改构造函数的行为。这应该避免。所以在构造函数中你应该使用

public Team(String newName) {
  teamName = newName;
}