获取器和设置器的目的是什么?

3

可能是重复的问题:https://dev59.com/nk7Sa4cB1Zd3GeqPzwGR - Paolo
只是让你知道,我最初在程序中实现getter和setter,仅仅将它们作为简单的(在我看来当时无用)函数来更改或检索变量,但在调试期间它们证明是救命稻草。如果它们是公共的,我不认为调试会那么容易 :) - wrongusername
5个回答

14

隐藏实现细节。如果您选择公开属性,然后决定更改其工作方式,则必须更改所有相关代码。

通过使用getter和setter,通常可以在不改变可见API的情况下更改内部实现细节(从而避免更改使用该类的API的任何代码)。


4

有时候变量的取值范围是有限制的,为了保证变量的合理性,在设置变量时需要进行检查。

例如,如果年龄不允许为-1,则需要在setter方法中进行检查。

if(value >= 0)
{
   _age = value;
}
else
{
  throw new InvalidAgeException("Age may not be less than 0");
}

4

Getter和Setter可以进行验证和延迟实例化,而公共成员则不能。

顺便提一下,这并不是语言无关的,因为大多数实现属性的语言都将其实现抽象化,使其在代码中看起来像公共成员。


奇怪的是,99%的setter/getter并不是用于验证或延迟初始化...尽管如此,Java仍然非常依赖它们...看看Pojo bean...虽然在IDE的帮助下它们不会打扰开发者,但是...这与反射无关...唯一与之相关的是代理,这需要使用setter/getter。 - lisak

3

Setter和getter适用于属性,不管你的代码中的“属性”是什么。

例如,您可以拥有一个angle变量,它存储以弧度表示的角度值。然后,您可以为此变量定义setter和getter,使用任何您认为相关的角度单位。


2

这是封装原则的一部分。您可以使用setter和getter作为与对象交互的接口,以便稍后添加任何功能(例如验证输入数据)而无需触及使用类的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接