当前位置: 首页 > 面试题库 >

getter和setter的目的是什么?

霍财
2023-03-14
问题内容

我读过一些书Java,说为诸如x和的变量创建setter和getter很好y。例如:

public int getX(){
    return x;
}

public void setX(int x){
    this.x = x;
}

但这有什么区别?

...(shape.x)...   // basically getX()

shape.x = 90;    // basically setX()

如果二传手和消气手更好,您能给我解释一下实际问题吗?


问题答案:

多个原因:

  • 如果您允许像

shape.x = 90

那么您将来将无法添加任何逻辑来验证数据。

如果x不能小于100,就不能这样做,但是如果您有像

public void setShapeValue(int shapeValue){
  if(shapeValue < 100){
    //do something here like throw exception.
  }
}
  • 您不能在写入逻辑上添加诸如复制之类的内容(请参见CopyOnWriteArrayList)
  • 另一个原因是要访问您班级以外的字段,您将不得不将它们标记为公共,受保护或默认值,从而使您失去控制。当数据在类突破封装和一般的OOPS方法中非常内部时。

虽然对于像

public final String SOMETHING = "SOMETHING";

您将允许对字段的访问,因为它们无法更改,例如,变量会将它们与getter,setter放置在一起。

  • 另一种情况是,当您希望Class是不可变的时,如果允许字段访问,那么由于可以更改值,因此您正在破坏Class的不变性。但是,如果您使用getter和setter精心设计类,则可以保持不变性不变。

尽管在这种情况下,您必须谨慎使用getter方法,以确保您不给出对象的引用(以防您的类将对象作为实例)。

我们可以在使用getter和setter的任何程序包中使用私有变量。



 类似资料:
  • 问题内容: 请原谅它的长度,但是这里有两个程序,两者完全相同,但是一个有一个没有setter,getter和构造函数的程序。 我之前已经学过一个基本的C ++类,并且不记得其中的任何一个,而现在我还没有看到它们的意义,如果有人可以用拉面的术语来解释它们的话,我将不胜感激。目前,它们似乎不过是浪费空间,以使我的代码看起来更长,但是老师说它们很重要(到目前为止,就是这样)。 提前致谢!现在是代码:Mi

  • 问题内容: 我这样做: 要么 我是Python的新手,所以我仍在探索语法,并且我想在此方面提供一些建议。 问题答案: 试试这个:Python属性 示例代码是:

  • 有两种类型的对象属性。 第一种是 数据属性。我们已经知道如何使用它们了。到目前为止,我们使用过的所有属性都是数据属性。 第二种类型的属性是新东西。它是 访问器属性(accessor properties)。它们本质上是用于获取和设置值的函数,但从外部代码来看就像常规属性。 Getter 和 setter 访问器属性由 “getter” 和 “setter” 方法表示。在对象字面量中,它们用 get

  • Lombok@Data annotation将在带注释的类上无声地添加字段的setter和getter。 如何在龙目岛添加基于条件的setter? lombok中有没有这样的支持 我已经在龙目岛文件中搜索了,我没有看到关于我的问题的解释。

  • 问题内容: 始终建议使用getter / setter访问私有变量。为什么最好将它们声明为public并对其进行访问。无论如何,我们正在使用getter和setter访问它? 问题答案: @mre的回答非常好,您的问题很重要。总结一下:您将对象的字段设置为私有,以控制其他对象使用它的方式。您的对象使用setter来: 限制和验证传递给设置器的数据 隐藏其内部数据结构(服务对其他对象感兴趣,而不是服

  • 据我所知,封装对外部人员隐藏了您的数据成员,并且只允许它使用相同类的方法访问。因此他们无法向外部人员显示您的个人数据。遵循这是真的, 在这里,您的金额变量不会与使用private的外部用户共享,他们也不知道您使用的变量名称。 但在类似的情况下,我们还提供了访问它们的getter/setter,那么封装如何能够从外部安全地进行呢? 这意味着getter或setter方法很可能具有相同的模式,而局外人