可能的重复:
公共数据成员与 Getters、Setters
类中私有成员的用途
当您可以将变量公开并避免诸如A.setVariableX(A.getVariableY())
?
可能的重复:
公共数据成员与 Getters、Setters
类中私有成员的用途
当您可以将变量公开并避免诸如A.setVariableX(A.getVariableY())
?
隐藏实现细节。如果您选择公开您的属性,然后决定更改它们的工作方式,您必须更改所有相关代码。
使用 getter 和 setter,您通常可以在不更改可见 API 的情况下更改内部实现细节(从而避免更改使用相关类 API 的任何代码)。
Getter 和 setter 可以进行验证和惰性实例化,而公共成员则不能。
顺便说一句,这与语言无关,因为大多数实现属性的语言都将实现抽象化,因此它们看起来像代码中的公共成员。
因为有时对于您的变量可能是什么存在一些限制,并且在设置它时必须检查它是否有意义。
例如,如果您的 Age 不允许为 -1,您将在您的 setter 中进行检查。
if(value >= 0)
{
_age = value;
}
else
{
throw new InvalidAgeException("Age may not be less than 0");
}
无论您的代码中有什么“属性”,Setter 和 getter 都适用于属性。
For instance, you can have an angle
variable, which stores an angle value expressed in radians. you can then define setters and getters for this variable, with any angle unit that you think relevant.
这是封装原则的一部分。您使用 setter 和 getter 作为与对象交互的接口,以便您可以 - 例如 - 稍后添加任何功能(如验证输入数据)而无需接触使用类的代码。