可能的重复问题:
公共数据成员 vs Getters、Setters
类中私有成员的目的
当您可以将变量设置为公共并避免使用A.setVariableX(A.getVariableY())
这样的行时,Getter和Setter的用途是什么?
可能的重复问题:
公共数据成员 vs Getters、Setters
类中私有成员的目的
当您可以将变量设置为公共并避免使用A.setVariableX(A.getVariableY())
这样的行时,Getter和Setter的用途是什么?
隐藏实现细节。如果您选择公开属性,然后决定更改其工作方式,则必须更改所有相关代码。
通过使用getter和setter,通常可以在不改变可见API的情况下更改内部实现细节(从而避免更改使用该类的API的任何代码)。
有时候变量的取值范围是有限制的,为了保证变量的合理性,在设置变量时需要进行检查。
例如,如果年龄不允许为-1,则需要在setter方法中进行检查。
if(value >= 0)
{
_age = value;
}
else
{
throw new InvalidAgeException("Age may not be less than 0");
}
Getter和Setter可以进行验证和延迟实例化,而公共成员则不能。
顺便提一下,这并不是语言无关的,因为大多数实现属性的语言都将其实现抽象化,使其在代码中看起来像公共成员。
Setter和getter适用于属性,不管你的代码中的“属性”是什么。
例如,您可以拥有一个angle
变量,它存储以弧度表示的角度值。然后,您可以为此变量定义setter和getter,使用任何您认为相关的角度单位。
这是封装原则的一部分。您可以使用setter和getter作为与对象交互的接口,以便稍后添加任何功能(例如验证输入数据)而无需触及使用类的代码。