总是推荐使用getter/setter来访问私有变量。为什么将它们声明为公共并访问它们不是一个更好的主意。不管怎样,我们是用getter和setter来访问它吗?
发布于 2011-08-27 00:52:16
我总是被告知,其中一个主要原因是尝试并计划未来的变化。它可能一开始只是
public int getInt() { return _someInt;}
但最终可能会成为
public int getInt() {
// do some processing
return _someInt;
}
这将使您不必对访问公共属性的位置进行大量更改,而不是使用getter/setter。
发布于 2011-08-27 00:50:18
通常,setter允许您对分配给私有成员的值的类型进行限制。所以可能负值是不允许的,等等。
由于上面的原因,您通过将成员设置为私有来强制访问该成员,因此getter允许消费者访问该成员的值。
发布于 2011-10-04 21:41:11
我经常使用getter和setter,但显然我们做得不对。例如:(从http://java.dzone.com/articles/java-properties-without获取)
使用getter和setter (很长)
public class Teacher {
@Id @Column(length=5) @Required
private String id;
@Column(length=40) @Required
private String name;
@OneToMany(mappedBy="teacher")
private Collection pupils;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Collection getPupils() {
return pupils;
}
public void setPupils(Collection pupils) {
this.pupils = pupils;
}
}
with public:(只有13行,包括空行)。
@Entity
public class Teacher {
@Id @Column(length=5) @Required
public String id;
@Column(length=40) @Required
public String name;
@OneToMany(mappedBy="teacher")
public Collection pupils;
}
使用getter和setter调用(不是很清楚,但是C#让它更简洁)。
teacher.setName("M. Carmen");
String result = teacher.getName();
调用public (直接和干净)。
teacher.name = "M. Carmen";
String result = teacher.name;
一种是冗长的,它增加了更多的代码(以及工作时间和处理时间的代码成本),而另一种是直接的。
在某些情况下,必须使用setter和getter,但如果不是这样,那么我认为使用它作为默认设置有点过分了。
https://stackoverflow.com/questions/7207994
复制相似问题