2

我被告知以下代码不遵循正确的 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;
    }       
  }

}
4

5 回答 5

7

如果变量名是X,那么 getter/setter 就是getX/setX

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

它还会为您正确生成equals,而您没有这样做,并为您提供一个hashCode。你总是需要同时实现这两者。阅读 Joshua Bloch 的“Effective Java”第 3 章,了解其中的方法和原因。

于 2013-05-27T12:32:17.747 回答
4

它应该是getTeamNamesetTeamName而不是。通常,如果您的属性被调用foo,则 getter 和 setter 将分别为getFoosetFoo

当然,您也可以将属性名称从teamNameto重构name,因为您的类已经被调用Team,正如评论中所建议的那样。

于 2013-05-27T12:32:06.493 回答
1

按照以下链接进行命名约定

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

此外,PDF 规范

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

于 2013-05-27T12:36:42.007 回答
0

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

在这种情况下,正确的约定必须是getTeamNameand 。setTeamName

于 2013-05-27T12:33:36.050 回答
0

对于名为teamName你的 setter 的变量被调用setTeamName

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

public Team(String newName) {
  teamName = newName;
}
于 2013-05-27T12:35:21.290 回答