我被告知以下代码不遵循正确的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;
}
}
}
答案 0 :(得分:7)
如果变量名称为X
,则getter / setter为getX/setX
。
任何好的IDE,比如IntelliJ,都会为你生成这些。
它也会正确地为你生成等号,你没有,并给你一个hashCode。你总是需要将这两者结合起来。阅读约书亚布洛赫的“有效Java”chapter 3,看看他们的情况如何。
答案 1 :(得分:4)
应该是getTeamName
和setTeamName
。通常,如果您的媒体资源名为foo
,则getter和setter分别为getFoo
和setFoo
。
当然,您也可以将属性名称从teamName
重构为name
,因为您的类已经按照评论中的建议调用Team
。
答案 2 :(得分:1)
按照以下链接命名约定
http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138795.html
第8.8节“推断名称的大写”以及属性的名称应如何。
答案 3 :(得分:0)
getter和setter应该引用属性名称。
在这种情况下,正确的约定必须是getTeamName
和setTeamName
。
答案 4 :(得分:0)
对于名为teamName
的变量,您的setter称为setTeamName
。
也不要在构造函数中使用setter和getter方法,因为可以通过扩展类来覆盖setter。通过这种方式,您可以通过仅更改setter而不是构造函数来更改构造函数的行为。这应该避免。所以在构造函数中你应该使用
public Team(String newName) {
teamName = newName;
}