使用getter和setter(只获取和设置)而不是简单地为这些变量使用公共字段有什么好处?
如果getter和setter所做的不仅仅是简单的get/set,我可以很快地解决这个问题,但我不是100%清楚如何做到:
public String foo;
比:
private String foo;
public void setFoo(String foo) { this.foo = foo; }
public String getFoo() { return foo; }
而前者需要的样板代码要少得多。
我们使用getter和setter:
可重用性在编程的后期执行验证
Getter和setter方法是访问私有类成员的公共接口。
封装咒语
封装的口头禅是将字段私有化,将方法公开化。
Getter方法:我们可以访问私有变量。Setter方法:我们可以修改私有字段。
尽管getter和setter方法没有添加新的功能,但我们可以稍后再改变主意,制作该方法
较好的更安全的;和更快。
只要可以使用值,就可以添加返回该值的方法。而不是:
int x = 1000 - 500
use
int x = 1000 - class_name.getValue();
用外行的话来说
假设我们需要存储此人的详细信息。此人具有姓名、年龄和性别字段。要做到这一点,需要创建姓名、年龄和性别的方法。现在,如果我们需要创建另一个人,就需要重新创建姓名、年龄和性别的方法。
我们可以使用getter和setter方法创建一个bean类(Person),而不是这样做。因此,明天我们只要在需要添加新人员时创建这个Bean类(Person类)的对象即可(见图)。因此,我们重用bean类的字段和方法,这要好得多。
它可以用于延迟加载。假设所讨论的对象存储在数据库中,除非您需要,否则您不想获取它。如果该对象由getter检索,则内部对象可以为空,直到有人请求它,然后您可以在第一次调用getter时获取它。
我在交给我的一个项目中有一个基本页面类,它从几个不同的web服务调用加载一些数据,但这些web服务调用中的数据并不总是用于所有子页面。Web服务具有所有的优点,它开创了“慢”的新定义,因此如果不需要,您不想进行Web服务调用。
我从公共字段转到getter,现在getter检查缓存,如果缓存不存在,则调用web服务。因此,通过一点包装,许多web服务调用被阻止了。
因此,getter使我不必在每个子页面上找出我需要什么。如果我需要它,我打电话给吸气器,如果我还没有,它会帮我找到它。
protected YourType _yourName = null;
public YourType YourName{
get
{
if (_yourName == null)
{
_yourName = new YourType();
return _yourName;
}
}
}