Oop 获取者和设置者的目的?

Oop 获取者和设置者的目的?,oop,getter-setter,Oop,Getter Setter,可能的重复项: 当您可以公开变量并避免诸如A.setVariableX(A.getVariableY())之类的行的麻烦时,getter和setter有什么用?隐藏实现细节。如果您选择将属性公开,然后决定更改它们的工作方式,则必须更改所有关联的代码 使用getter和setter,您通常可以在不更改可见API的情况下更改内部实现细节(从而避免更改使用所讨论类的API的任何代码)。这是封装原则的一部分。您可以使用setter和getter作为与对象交互的接口,这样您就可以(例如)稍后添加任何功

可能的重复项:


当您可以公开变量并避免诸如
A.setVariableX(A.getVariableY())
之类的行的麻烦时,getter和setter有什么用?

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


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

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

getter和setter可以进行验证,惰性实例化,而公共成员则不能


另一方面,这并不是语言不可知的,因为大多数实现属性的语言都抽象掉了实现,所以它们看起来像代码中的公共成员。

因为有时会有一些约束,比如变量可能是什么,并且必须检查设置时是否有意义

例如,如果您的年龄不允许为-1,您可以在setter中检查

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

setter和getter应用于属性,不管代码中有什么“属性”


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

可能的重复:正如您所知,我在程序中首先实现了getter和setter,它与更改或检索变量的函数一样简单(在当时我是无用的),但在抛出异常的调试过程中,它们被证明是救命稻草。我不明白如果它们是公共的,调试怎么会这么容易:)奇怪的是,99%的setter/getter并不是用来验证或延迟初始化的……尽管Java都是关于它们的。。。看看波乔豆。。。的确,在IDE的帮助下,他们根本不会打扰开发人员,但仍然。。。这与反思无关。。。唯一与之相关的是代理,它需要setter/getter