我最近开始使用 Java 工作,并接触到了一切事物的 getter 和 setter 的疯狂世界。一开始我很讨厌它,但很快就习惯了。太习惯了。
我最近花了很多时间更多地思考类设计。我想做的一件事是避免陷入为所有事情都进行 getter 和 setter 的陷阱。然而,我所做的大部分工作都是针对主要是数据容器的实体,我不确定 getter 和 setter 在这些情况下实际上是否合适。
这是一个使用公共(public)属性的简单示例。
class Space {
public String name;
public String description;
Space(final String name, final String description) {
this.name = name;
this.description = description;
}
}
这是一个使用私有(private)属性以及使用 getter 和 setter 的简单示例。
class Space {
private String name;
private String description;
Space(final String name, final String description) {
this.name = name;
this.description = description;
}
public String getName() {
return this.name;
}
public void setName(final String name) {
this.name = name;
}
public String getDescription() {
return this.description;
}
public void setDescription(final String description) {
this.description = description;
}
}
在这些示例中,name
和 description
字段都应该能够更改。
我觉得 getter/setter 示例更清晰,并且隐藏了 name
和 description
的实现细节。如果需要的话,它还允许稍后在现场进行验证。
我读过一些关于 getter 和 setter 是邪恶的和/或反模式的讨论,但感觉这些可能不适用于这种情况。
也许有些选项我还没有考虑过。我愿意接受建议!
最佳答案
第一个版本(公共(public)属性)不是一个好主意。第二个更好。正如乔什·布洛赫(Josh Bloch)所说,"favor immutability" :
public class Space {
private final String name;
private final String description;
public Space(final String name, final String description) {
this.name = name;
this.description = description;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
}
关于实体对象数据属性的 getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/406288/